java实现聊天室功能包含全部代码有界面.docx
- 文档编号:3742457
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:23
- 大小:20.82KB
java实现聊天室功能包含全部代码有界面.docx
《java实现聊天室功能包含全部代码有界面.docx》由会员分享,可在线阅读,更多相关《java实现聊天室功能包含全部代码有界面.docx(23页珍藏版)》请在冰豆网上搜索。
java实现聊天室功能包含全部代码有界面
服务器端代码:
import.*;
importjava.io.*;
importjava.util.*;
importjava.util.concurrent.*;
importjavax.swing.*;
publicclassServer
{
privatestaticfinalintPORT=6666;
G_Menugm=newG_Menu();
privateServerSocketserver;
publicArrayList
publicstaticStringuser;
publicstaticArrayList
publicUseruu;
publicServer(Stringuser)
{
this.user=user;
}
publicvoidgetServer()
{
list=newArrayList
try{
server=newServerSocket(PORT);
System.out.println("服务器启动,开始监听......");
while(true)
{
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()
{
try{
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
while(it.hasNext())
{
Useruse=it.next();
msg=use.getName()+"("+use.getSex()+"):
";
mssg+=msg;//将所有的用户信息连接成一个字符串
}
sendMessage("1008611");//显示好友列表匹配标识
sendMessage(mssg);//群发消息
}
elseif(msg.equals("10010"))//显示说话消息
{
msg=br.readLine();
System.out.println(msg);
sendMessage("10010");//显示说话信息匹配标识
sendMessage(msg);
}
elseif(msg.equals("10086"))//显示进入聊天室
{
msg=br.readLine();
System.out.println(msg);
sendMessage("10086");//进入聊天室匹配标识
sendMessage(msg);
}
elseif(msg.equals("841163574"))//私聊
{
msg=br.readLine();
String[]rt=msg.split("1072416535");//把传进来的用户信息跟说话内容分开
System.out.println(rt[1]);//在服务器端显示说话内容
String[]tg=rt[0].split(":
");//因为是私聊,传过来两个用户的用户信息,这句作用是再把两个用户信息分开
Iterator
while(iu.hasNext())
{
Userse=iu.next();
if(tg[1].equals(se.getName()+"("+se.getSex()+")"))//如果传进来的用户信息跟集合中的用户信息吻合
{
try{
PrintWriterpwriter=newPrintWriter(se.getSock().getOutputStream());//建立用户自己的流
pwriter.println("841163574");//匹配标识
pwriter.println(rt[1]);//向单独用户发送消息
pwriter.flush();
System.out.println(rt[1]);
}catch(Exceptionex){
ex.printStackTrace();
}
}
elseif(tg[0].equals(se.getName()))//如果传进来的用户信息跟集合中的用户信息吻合
{
try{
PrintWriterpwr=newPrintWriter(se.getSock().getOutputStream());//建立用户自己的流
pwr.println("841163574");//匹配标识
pwr.println(rt[1]);//向单独用户发送消息
pwr.flush();
System.out.println(rt[1]);
}catch(Exceptionex){
ex.printStackTrace();
}
}
}
}
elseif(msg.equals("456987"))//下线
{
msg=br.readLine();
System.out.println(msg);//在服务端显示信息
sendMessage("456987");//匹配字符串
sendMessage(msg);//匹配完毕后群发消息
String[]si=msg.split(":
");//将传过来的用户名跟信息分隔开
Iterator
while(at.hasNext())
{
Usersr=at.next();
if(sr.getName().equals(si[0]))//如果传过来的用户名跟用户集合里的用户吻合
{
list1.remove(sr);//将吻合的用户移除
sr.getSock().close();//关闭此用户的socket
}
}
break;
}
elseif(msg.equals("123654"))//刷新
{
Stringmssge="";
Iterator
while(iter.hasNext())
{
Useruus=iter.next();
msg=uus.getName()+"("+uus.getSex()+"):
";
mssge+=msg;//将所有的用户信息连接成一个字符串
}
sendMessage("123654");//发送刷新匹配标识
sendMessage(mssge);//群发消息
}
}
}catch(IOExceptionex){
ex.printStackTrace();
}
}
}
publicvoidsendMessage(Stringmessage)//群发消息方法
{
try{
for(PrintWriterpw:
list)//输出流集合
{
pw.println(message);
pw.flush();
}
}catch(Exceptionex){
ex.printStackTrace();
}
}
}
客户端代码:
import.*;
importjava.io.*;
importjava.util.*;
importjava.util.concurrent.*;
publicclassSocket_one//客户端
{
privatestaticfinalintPORT=6666;//端口
publicstaticStringuser;
publicstaticSocketsocket;
publicSocket_one(Stringuser)
{
this.user=user;
try{
socket=newSocket("127.0.0.1",PORT);//建立socket连接
System.out.println("【"+user+"】欢迎来到聊天室!
");
Threadtt=newThread(newRecove(socket,user));//建立客户端线程
tt.start();//启动线程
}catch(Exceptionex)
{
ex.printStackTrace();
}
}
publicstaticvoidmain(String[]args)throwsException
{
newSocket_one(user);
}
}
classRecoveimplementsRunnable
{
publicStringuser;
privateSocketsocket;
privateBufferedReaderkeybord;
publicBufferedReaderbr;
privatePrintWriterpw;
privateStringmsg;
G_Menugm=newG_Menu();
publicRecove(Socketsocket,Stringuser)throwsIOException
{
try{
this.socket=socket;
this.user=user;
}catch(Exceptionex){
ex.printStackTrace();
}
}
publicvoidrun()
{
try{
br=newBufferedReader(newInputStreamReader(socket.getInputStream()));
while((msg=br.readLine())!
=null)
{
Stringmessage=msg;
if(message.equals("1008611"))//匹配字符串显示好友列表
{
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("841163574"))//私聊
{
message=br.readLine();
System.out.println("收到:
"+message);//在服务器端显示私聊消息
gm.jta2.append(message+"\n");//在我的频道显示私聊信息
}
elseif(message.equals("10010"))//显示说话消息
{
message=br.readLine();
System.out.println("收到:
"+message);//在服务器端显示说话信息
gm.jta1.append(message+"\n");//在公共频道显示说话信息
gm.jta2.append(message+"\n");//在我的频道显示说话信息
}
elseif(message.equals("10086"))//显示进入聊天室
{
message=br.readLine();
gm.jta1.append(message+"\n");//在公共频道显示进入聊天室信息
gm.jta2.append(message+"\n");//在我的频道显示进入聊天室信息
}
elseif(message.equals("123654"))//刷新
{
gm.listModel1.clear();//将好友列表清空
gm.jcomb.removeAllItems();//将JCombox清空
gm.jcomb.addItem("所有人");
message=br.readLine();
String[]sr=message.split(":
");//将接收到的用户信息分隔开
for(Stringsst:
sr)
{
gm.listModel1.addElement(sst);////将刷新后所有用户信息添加到好友列表
gm.jcomb.addItem(sst);//将刷新后所有用户信息添加到JCombox
}
}
elseif(message.equals("456987"))//下线
{
message=br.readLine();
gm.jta1.append(message+"\n");//在公共频道显示用户下线信息
gm.jta2.append(message+"\n");//在我的频道显示用户下线信息
}
}
}catch(IOExceptionex){
ex.printStackTrace();
}
}
}
登陆界面代码:
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.util.*;
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(event.getActionCommand().equals("连接"))
{
if(jtf1.getText().equals(""))
{
JOptionPane.showMessageDialog(null,"请输入用户名!
");
}
elseif(!
jrb1.isSelected()&&!
jrb2.isSelected()&&!
jrb3.isSelected())
{
JOptionPane.showMessageDialog(null,"请选择性别!
");
}
else
{
jf.setVisible(false);
if(jrb1.isSelected())
{
s1="boy";
}
elseif(jrb2.isSelected())
{
s1="girl";
}
el
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 实现 聊天室 功能 包含 全部 代码 界面