java实现聊天室功能包含全部代码有界面Word格式.docx
《java实现聊天室功能包含全部代码有界面Word格式.docx》由会员分享,可在线阅读,更多相关《java实现聊天室功能包含全部代码有界面Word格式.docx(23页珍藏版)》请在冰豆网上搜索。
{
Socketclient=server.accept();
//接收客户端线程
PrintWriterwriter=newPrintWriter(client.getOutputStream());
list.add(writer);
Threadt=newThread(newChat(client));
t.start();
}
}catch(Exceptionex){
ex.printStackTrace();
}
publicstaticvoidmain(String[]args)
newServer(user).getServer();
classChatimplementsRunnable
Socketsocket;
privateBufferedReaderbr;
privateStringmsg;
privateStringmssg="
"
;
publicChat(Socketsocket)
{
try{
this.socket=socket;
}catch(Exceptionex){
ex.printStackTrace();
publicvoidrun()
br=newBufferedReader(newInputStreamReader(socket.getInputStream()));
while((msg=br.readLine())!
=null)
{
if(msg.equals("
1008611"
))//匹配字符串显示好友列表
{
msg=br.readLine();
String[]st=msg.split("
:
//将用户信息跟消息分隔开
uu=newUser(st[0],st[1],socket);
//将用户信息添加到User对象中
list1.add(uu);
//将对象添加到用户集合
Iterator<
it=Server.list1.iterator();
//遍历用户集合
while(it.hasNext())
{
Useruse=it.next();
msg=use.getName()+"
("
+use.getSex()+"
):
mssg+=msg;
//将所有的用户信息连接成一个字符串
}
sendMessage("
//显示好友列表匹配标识
sendMessage(mssg);
//群发消息
elseif(msg.equals("
10010"
))//显示说话消息
System.out.println(msg);
//显示说话信息匹配标识
sendMessage(msg);
}
10086"
))//显示进入聊天室
//进入聊天室匹配标识
841163574"
))//私聊
String[]rt=msg.split("
1072416535"
//把传进来的用户信息跟说话内容分开
System.out.println(rt[1]);
//在服务器端显示说话内容
String[]tg=rt[0].split("
//因为是私聊,传过来两个用户的用户信息,这句作用是再把两个用户信息分开
iu=Server.list1.iterator();
while(iu.hasNext())
Userse=iu.next();
if(tg[1].equals(se.getName()+"
+se.getSex()+"
)"
))//如果传进来的用户信息跟集合中的用户信息吻合
{
try{
PrintWriterpwriter=newPrintWriter(se.getSock().getOutputStream());
//建立用户自己的流
pwriter.println("
//匹配标识
pwriter.println(rt[1]);
//向单独用户发送消息
pwriter.flush();
System.out.println(rt[1]);
}catch(Exceptionex){
ex.printStackTrace();
}
}
elseif(tg[0].equals(se.getName()))//如果传进来的用户信息跟集合中的用户信息吻合
PrintWriterpwr=newPrintWriter(se.getSock().getOutputStream());
pwr.println("
pwr.println(rt[1]);
pwr.flush();
456987"
))//下线
//在服务端显示信息
//匹配字符串
//匹配完毕后群发消息
String[]si=msg.split("
//将传过来的用户名跟信息分隔开
at=Server.list1.iterator();
while(at.hasNext())
Usersr=at.next();
if(sr.getName().equals(si[0]))//如果传过来的用户名跟用户集合里的用户吻合
list1.remove(sr);
//将吻合的用户移除
sr.getSock().close();
//关闭此用户的socket
break;
123654"
))//刷新
Stringmssge="
iter=Server.list1.iterator();
while(iter.hasNext())
Useruus=iter.next();
msg=uus.getName()+"
+uus.getSex()+"
mssge+=msg;
//发送刷新匹配标识
sendMessage(mssge);
}
}catch(IOExceptionex){
publicvoidsendMessage(Stringmessage)//群发消息方法
for(PrintWriterpw:
list)//输出流集合
pw.println(message);
pw.flush();
}
客户端代码:
publicclassSocket_one//客户端
//端口
publicstaticSocketsocket;
publicSocket_one(Stringuser)
socket=newSocket("
127.0.0.1"
PORT);
//建立socket连接
【"
+user+"
】欢迎来到聊天室!
Threadtt=newThread(newRecove(socket,user));
//建立客户端线程
tt.start();
//启动线程
}catch(Exceptionex)
publicstaticvoidmain(String[]args)throwsException
newSocket_one(user);
classRecoveimplementsRunnable
publicStringuser;
privateSocketsocket;
privateBufferedReaderkeybord;
publicBufferedReaderbr;
privatePrintWriterpw;
privateStringmsg;
publicRecove(Socketsocket,Stringuser)throwsIOException
try{
this.socket=socket;
publicvoidrun()
br=newBufferedReader(newInputStreamReader(socket.getInputStream()));
while((msg=br.readLine())!
Stringmessage=msg;
if(message.equals("
gm.listModel1.clear();
//接收前清空好友列表
gm.jcomb.removeAllItems();
//清空JCombox
gm.jcomb.addItem("
所有人"
message=br.readLine();
String[]str=message.split("
//将接收到的所有用户信息分隔开
for(Stringss:
str)
gm.listModel1.addElement(ss);
//将所有用户信息添加到好友列表
gm.jcomb.addItem(ss);
//将所有用户信息添加到JCombox
elseif(message.equals("
System.out.println("
收到:
+message);
//在服务器端显示私聊消息
gm.jta2.append(message+"
\n"
//在我的频道显示私聊信息
//在服务器端显示说话信息
gm.jta1.append(message+"
//在公共频道显示说话信息
//在我的频道显示说话信息
//在公共频道显示进入聊天室信息
//在我的频道显示进入聊天室信息
//将好友列表清空
//将JCombox清空
String[]sr=message.split("
//将接收到的用户信息分隔开
for(Stringsst:
sr)
gm.listModel1.addElement(sst);
////将刷新后所有用户信息添加到好友列表
gm.jcomb.addItem(sst);
//将刷新后所有用户信息添加到JCombox
//在公共频道显示用户下线信息
//在我的频道显示用户下线信息
}catch(IOExceptionex){
登陆界面代码:
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.border.*;
classLandenextendsFrameimplementsActionListener
JFramejf=newJFrame("
聊天登陆"
JPaneljp1=newJPanel();
JPaneljp2=newJPanel();
JPaneljp3=newJPanel();
JPaneljp4=newJPanel();
JLabeljl1=newJLabel("
姓名:
JLabeljl2=newJLabel("
地址:
JLabeljl3=newJLabel("
端口:
JRadioButtonjrb1=newJRadioButton("
男生"
JRadioButtonjrb2=newJRadioButton("
女生"
JRadioButtonjrb3=newJRadioButton("
保密"
publicJTextFieldjtf1=newJTextField(10);
publicJTextFieldjtf2=newJTextField(10);
publicJTextFieldjtf3=newJTextField(10);
JButtonjb1=newJButton("
连接"
JButtonjb2=newJButton("
断开"
TitledBordertb=newTitledBorder("
ButtonGroupgb=newButtonGroup();
publicvoidinit()//显示登录界面
jb1.addActionListener(this);
jb2.addActionListener(this);
jp1.add(jl1);
jp1.add(jtf1);
jp1.add(jrb1);
jp1.add(jrb2);
jp1.add(jrb3);
jp2.add(jl2);
jp2.add(jtf2);
jp2.add(jl3);
jp2.add(jtf3);
jp3.add(jb1);
jp3.add(jb2);
jp4.setLayout(newGridLayout(3,1));
jp4.add(jp1);
jp4.add(jp2);
jp4.add(jp3);
jf.add(jp4);
jtf2.setText("
localhost"
jtf3.setText("
6666"
gb.add(jrb1);
gb.add(jrb2);
gb.add(jrb3);
jf.setLocation(200,200);
jf.setSize(350,200);
jf.setResizable(false);
jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
jf.setVisible(true);
publicvoidactionPerformed(ActionEventevent)//事件触发
jb1.setText("
jb2.setText("
Strings1=null;
if(event.getActionCommand().equals("
))
System.exit(0);
if(jtf1.getText().equals("
JOptionPane.showMessageDialog(null,"
请输入用户名!
elseif(!
jrb1.isSelected()&
&
!
jrb2.isSelected()&
jrb3.isSelected())
请选择性别!
else
jf.setVisible(false);
if(jrb1.isSelected())
s1="
boy"
elseif(jrb2.isSelected())
girl"
el