Java源代码聊天室汇总.docx
- 文档编号:10776934
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:29
- 大小:152.79KB
Java源代码聊天室汇总.docx
《Java源代码聊天室汇总.docx》由会员分享,可在线阅读,更多相关《Java源代码聊天室汇总.docx(29页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 源代码 聊天室 汇总