Java源代码聊天室汇总.docx

上传人:b****3 文档编号:4592916 上传时间:2023-05-07 格式:DOCX 页数:29 大小:152.79KB
下载 相关 举报
Java源代码聊天室汇总.docx_第1页
第1页 / 共29页
Java源代码聊天室汇总.docx_第2页
第2页 / 共29页
Java源代码聊天室汇总.docx_第3页
第3页 / 共29页
Java源代码聊天室汇总.docx_第4页
第4页 / 共29页
Java源代码聊天室汇总.docx_第5页
第5页 / 共29页
Java源代码聊天室汇总.docx_第6页
第6页 / 共29页
Java源代码聊天室汇总.docx_第7页
第7页 / 共29页
Java源代码聊天室汇总.docx_第8页
第8页 / 共29页
Java源代码聊天室汇总.docx_第9页
第9页 / 共29页
Java源代码聊天室汇总.docx_第10页
第10页 / 共29页
Java源代码聊天室汇总.docx_第11页
第11页 / 共29页
Java源代码聊天室汇总.docx_第12页
第12页 / 共29页
Java源代码聊天室汇总.docx_第13页
第13页 / 共29页
Java源代码聊天室汇总.docx_第14页
第14页 / 共29页
Java源代码聊天室汇总.docx_第15页
第15页 / 共29页
Java源代码聊天室汇总.docx_第16页
第16页 / 共29页
Java源代码聊天室汇总.docx_第17页
第17页 / 共29页
Java源代码聊天室汇总.docx_第18页
第18页 / 共29页
Java源代码聊天室汇总.docx_第19页
第19页 / 共29页
Java源代码聊天室汇总.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Java源代码聊天室汇总.docx

《Java源代码聊天室汇总.docx》由会员分享,可在线阅读,更多相关《Java源代码聊天室汇总.docx(29页珍藏版)》请在冰点文库上搜索。

Java源代码聊天室汇总.docx

Java源代码聊天室汇总

Java

目录

1本文简介2

2聊天室截图与说明2

2.1用Java编译:

2

2.2服务器登录界面2

2.3服务器窗口2

2.4客服端登录界面3

2.5客服端窗口3

3服务器端3

3.1MyServer(方法3

3.2Login(方法3

3.3Time(方法3

4客户端3

4.1MyClient(方法3

4.2Login(方法3

4.3Time(方法3

1

本文简介

这是一个简单的Java聊天室,仅提供给一些刚学Java的学生做实验,本文也是仅供参考.本文代码都有注释,希望读者能读懂代码,本实验内部还有一些错误,比如只能一条一条的发信息,不能连发,希望能解决本问题的朋友能给我发信息,我的QQ号就是XX号!

2聊天室截图与说明

2.1用Java编译:

本代码有七个类,放在六个java文件中,类名在下方希望读者自己观看,

2.2服务器登录界面

要先运行服务器端的程序

用户名:

y

密码:

1

用户名密码可以自己设定点击确定可以登录,2秒后到服务端界面

2.3服务器窗口

聊天室的IP为本机的网络虚拟IP,在任何电脑上都能用,端口应设置在1024以后,

2.4客服端登录界面

和服务器端的登录一样

2.5客服端窗口

当登录上后客服端就显示已经连接了,此时服务器端的窗口如下

由于本程序设计的不是很完整,具体的聊天要先从客服端开始:

在客服端输入一条聊天内容后按确定,在服务器端就可以收到信息,之后客户端不能输入了,要等待服务器端来信息后才能继续输入信息.

想要结束聊天,直接可以关闭窗口,也可以输入’bye’后断开聊天

有兴趣的朋友可以继续完善本实验程序.

3服务器端

3.1MyServer(方法

//服务器端代码

importjava.awt.*;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjava.io.BufferedReader;

importjava.io.InputStreamReader;

importjava.io.PrintWriter;

import.ServerSocket;

import.Socket;

importjava.text.DateFormat;

importjava.util.Date;

importjavax.swing.*;

publicclassMyServer{//窗体实现类

protectedJLabellab10;//全体变量,做传递的一个组件

Strings="已经成功连接";//初始字符串,在两个聊天窗口链接成功时输出,同时作为两个窗口传递字符的一个变量

//构造方法

publicMyServer({

try{//异常处理try

JFrameframe=newJFrame("服务器窗口";//设置窗体

frame.setLayout(null;//让布局管理器为空,使用绝对定位

Fontfnt=newFont("Serief",Font.PLAIN,40;//字体设置

Fontfnt1=newFont("Serief",Font.PLAIN,20;//字体设置

//我的用户名显示

JLabellab1=newJLabel("服务器名:

",JLabel.LEFT;//标签实例化,文本左对齐

lab1.setBounds(8,10,100,20;//设置组件位置及大小

frame.add(lab1;//添加组件

JTextFieldtext2=newJTextField(30;//单行文本输入组件

text2.setBounds(150,10,200,20;//设置组件位置及大小

text2.setEnabled(false;//文本条不可编辑

text2.setText("笑笑聊天室";//输入内容

text2.setFont(fnt1;//设置字体

frame.add(text2;//添加组件

//服务器IP显示

JLabellab2=newJLabel("当前服务器IP:

",JLabel.LEFT;//标签实例化,文本左对齐

lab2.setBounds(8,45,100,20;//设置组件位置及大小

frame.add(lab2;//添加组件

JTextFieldtext3=newJTextField(30;//单行文本输入组件

text3.setBounds(150,45,200,20;//设置组件位置及大小

text3.setEnabled(false;//文本不可编辑

text3.setText("127.0.0.1";//输入内容

text3.setFont(fnt1;//设置字体

frame.add(text3;//添加组件

//服务器端口显示

JLabellab3=newJLabel("当前服务器端口:

",JLabel.LEFT;//标签实例化,文本左对齐

lab3.setBounds(8,80,100,20;//设置组件位置及大小

frame.add(lab3;//添加组件

JTextFieldtext4=newJTextField(30;//单行文本输入组件

text4.setBounds(150,80,200,20;//设置组件位置及大小

text4.setEnabled(false;//文本不可编辑

text4.setText("8888";//输入内容

text4.setFont(fnt1;//设置字体

frame.add(text4;//添加组件

//聊天记录显示

JLabellab4=newJLabel("聊天记录如下:

",JLabel.LEFT;//标签实例化,文本左对齐

lab4.setBounds(8,115,100,20;//设置组件位置及大小

frame.add(lab4;//添加组件

finalJTextAreatext1=newJTextArea(;//多行文本输入组件

text1.setEnabled(false;//文本不可编辑

text1.setLineWrap(true;//自动换行

JScrollPanescr=newJScrollPane(text1,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS;//设置滚动条,水平和垂直滚动条始终显示

scr.setBounds(8,150,450,350;//设置组件位置及大小

frame.add(scr;//添加组件

//聊天输入窗口及确定

JLabellab5=newJLabel("请输入聊天内容:

",JLabel.LEFT;//标签实例化,文本左对齐

lab5.setBounds(8,500,100,20;//设置组件位置及大小

frame.add(lab5;//添加组件

finalJTextAreatext5=newJTextArea(;//多行文本输入组件

text5.setLineWrap(true;//自动换行

JScrollPanescr2=newJScrollPane(text5,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS;//设置滚动条,水平和垂直滚动条始终显示

scr2.setBounds(150,500,300,50;//设置组件位置及大小

frame.add(scr2;//添加组件

finalJButtonbut=newJButton("确定";//设置确定按钮

but.setFont(fnt;//添加字体设置

but.setBounds(480,500,200,50;//设置组件位置及大小

but.addActionListener(newActionListener({//采用内部匿名类

publicvoidactionPerformed(ActionEvente{

if(e.getSource(==but{//判断触发器源是否是提交按钮

text1.append("笑笑:

"+lab10.getText(+"\n";//在聊天记录上添加文本

text1.append(text5.getText(+"\n";//将输入的聊天内容输出在聊天记录上

s=text5.getText(;//得到聊天内容

text5.setText("";//将聊天窗口内容设置为空

}

}

};

frame.add(but;//添加组件

//当前时间显示

JLabellab7=newJLabel("时间显示:

",JLabel.LEFT;//标签实例化,文本左对齐

lab7.setBounds(450,20,100,20;//设置组件位置及大小

frame.add(lab7;//添加组件

DateFormatdf=DateFormat.getDateTimeInstance(;//取得系统时间

Stringdf2=df.format(newDate(;//将时间转换成字符串

JLabellab8=newJLabel(df2,JLabel.LEFT;//标签实例化,文本左对齐

lab8.setBounds(520,20,130,20;//设置组件位置及大小

frame.add(lab8;//添加组件

lab10=lab8;//传递时间显示,以便能在聊天记录上显示记录时间

newTime(lab8;//使时间动态显示

//用户列表显示

JLabellab6=newJLabel("用户列表:

",JLabel.LEFT;//标签实例化,文本左对齐

lab6.setBounds(500,40,100,20;//设置组件位置及大小

frame.add(lab6;//添加组件

JTextAreatext6=newJTextArea(;//标签实例化,文本左对齐

text6.setEnabled(false;//文本不可编辑

text6.setLineWrap(true;//自动换行

JScrollPanescr3=newJScrollPane(text6,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS;//设置滚动条,水平和垂直滚动条始终显示

scr3.setBounds(460,70,220,420;//设置组件位置及大小

frame.add(scr3;//添加组件

//窗口的属性

frame.setSize(700,600;//窗口大小

frame.getContentPane(.setBackground(Color.pink;//窗口的背景颜色

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE;//关闭窗口时关闭程序

frame.setLocation(100,50;//在电脑桌面上出现的位置

frame.setVisible(true;//显示窗口

//连个窗口连接

//建立ServerSocket并等待连接请求

ServerSocketserver=newServerSocket(8889;

Socketsocket=server.accept(;

//连接建立,通过Socket获取连接上的输入/输出流

BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream(;

finalPrintWriterout=newPrintWriter(socket.getOutputStream(;

//先读取Client发送的数据,然后从标准输入读取数据发送给Client当接收到bye时关闭连接

Strings1="",s2="";//标志字符串,作为传递字符串使用

while(!

(s1=in.readLine(.equals("bye"{//得到其他窗口传递的字符串,并判断是否结束

text6.setText("可可在线";//当连接成功是在用户列表中输出用户名字

if(!

s1.equals(""{//如果传递的字符串不为空

text1.append("可可:

"+lab10.getText(+"\n";//在聊天记录上添加文本

text1.append(s1+"\n";//将输入的聊天内容输出在聊天记录上

}

s2=s;//将在聊天窗口中得到的字符串传递给输出字符串

for(;s2.equals(""||s2.equals(null;s2=s{//当传递的字符串为空时等待用户输入聊天内容

}

s="";//将在聊天窗口中得到的字符串设为空

if(!

s2.equals(""&&!

s2.equals(null{//s2不为空时做

out.println(s2;//向其他窗口输出字符串

}

out.flush(;//输出聊天内容

}

//关闭连接

in.close(;

out.close(;

socket.close(;

server.close(;

}catch(Exceptione{

}

}

//main函数

publicstaticvoidmain(Stringargs[]{

newLogin(;//登录实现

}

}

4.2Login(方法

importjava.awt.event.WindowAdapter;

importjava.awt.event.ActionListener;

importjava.awt.event.WindowEvent;

importjava.awt.event.ActionEvent;

importjava.awt.Color;

importjava.awt.Font;

importjavax.swing.JFrame;

importjavax.swing.JButton;

importjavax.swing.JLabel;

importjavax.swing.JTextField;

importjavax.swing.JPasswordField;

//用户名和密码设置

classLoginCheck{//设置登录密码

privateStringname;//用户名

privateStringpassword;//密码

//构造方法

publicLoginCheck(Stringname,Stringpassword{

this.name=name;//传递用户名

this.password=password;//传递密码

}

//验证用户名和密码

publicbooleanvalidate({//验证方法

if("y".equals(name&&"1".equals(password{//判断用户名和密码是否正确

returntrue;//返回true

}else{

returnfalse;//返回false

}

}

};

//登录窗口

classLogin{//登录类名

booleanf=false;//按登录时设置的一个标志

privateJFrameframe=newJFrame("WelcomeToMLDN";//设置窗体

privateJButtonsubmit=newJButton("登陆";//设置登录按钮

privateJButtonreset=newJButton("重置";//设置重置按钮

privateJLabelnameLab=newJLabel("服务器:

";//标签实例化

privateJLabelpassLab=newJLabel("密码:

";//标签实例化

privateJLabelinfoLab=newJLabel("服务器登陆系统";//标签实例化

privateJTextFieldnameText=newJTextField(10;//单行文本输入条

privateJPasswordFieldpassText=newJPasswordField(;//单行密码文本输入条

publicLogin({//登录窗口构造方法

Fontfnt=newFont("Serief",Font.ITALIC+Font.BOLD,12;//设置字体

infoLab.setFont(fnt;//设置标签的显示文字

submit.addActionListener(newActionListener({//采用内部匿名类

publicvoidactionPerformed(ActionEvente{

if(e.getSource(==submit{//判断触发器源是否是提交按钮

Stringtname=nameText.getText(;//得到输入的用户名

Stringtpass=newString(passText.getPassword(;//得到输入的密码,此时通过getPassageword(方法返回的是字符数组

LoginChecklog=newLoginCheck(tname,tpass;//实例化LoginCheck对象,传入输入的用户名和密码

if(log.validate({//对用户名和密码进行验证

try{//线程异常处理try

Thread.sleep(2000;//2秒后打开聊天窗口

f=true;//登录成功后的表示项为true

frame.dispose(;//关闭本窗口

}catch(Exceptionee{//异常获取

}

}else{

infoLab.setText("登陆失败,错误的用户名或密码!

";//登录失败

}

}

}

};

reset.addActionListener(newActionListener({//采用内部匿名类

publicvoidactionPerformed(ActionEvente{

if(e.getSource(==reset{//判断触发器源是否是提交按钮

nameText.setText("";//设置文本框中的内容

passText.setText("";//设置文本框中的内容

infoLab.setText("服务器登陆系统";//恢复标签显示

}

}

};

frame.addWindowListener(newWindowAdapter({//加入窗口监听

publicvoidwindowClosing(WindowEvente{

}

};//加入事件

frame.setLayout(null;//使用绝对定位

nameLab.setBounds(5,5,60,20;//设置标签的位置及大小

passLab.setBounds(5,30,60,20;//设置标签的位置及大小

infoLab.setBounds(5,65,220,30;//设置标签的位置及大小

nameText.setBounds(65,5,100,20;//设置文本域的位置及大小

passText.setBounds(65,30,100,20;//设置密码域的位置及大小

submit.setBounds(165,5,60,20;//设置按钮的位置及大小

reset.setBounds(165,30,60,20;//设置按钮的位置及大小

frame.add(nameLab;//向窗体加入标签

frame.add(passLab;//向窗体加入标签

frame.add(infoLab;//向窗体加入标签

frame.add(nameText;//向窗体加入文本框

frame.add(passText;//向窗体加入密码框

frame.add(submit;//向窗体加入按钮

frame.add(reset;//向窗体加入按钮

frame.setSize(280,130;//设置窗体大小

frame.getContentPane(.setBackground(Color.green;//设置窗体的背景颜色

frame.setLocation(300,200;//设置窗体在电脑桌面上的位置

frame.setVisible(true;//显示窗口

while(f==false{//当登录失败时,一直循环运行,

}

newMyServer(;//显示窗体页面

}

}

4.3Time(方法

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjava.text.SimpleDateFormat;

importjava.util.Date;

importjavax.swing.JLabel;

importjavax.swing.Timer;

//时间类

publicclassTime{

publicTime(JLabeltime{//构造方法

this.setTimer(time;//设置时间

}

publicvoidsetTimer(JLabeltime{//设置时间方法

finalJLabelvarTime=time;//传递组件

TimertimeAction=newTimer(1000,newActionListener({//时间监听

publicvoidactionPerformed(ActionEvente{

longtimemillis=System.currentTimeMillis(;//得到系统时间

SimpleDateFormatdf=newSimpleDateFormat("yyyy-MM-ddHH:

mm:

ss";//转换日期显示格式

varTime.setText(df.format(newDate(timemillis;//输出得到的时间

}

};

timeAction.start(;//开启线程

}

}

5客户端

5.1MyClient(方法

importjava.awt.*;

importjava.awt.event.ActionE

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2