JAVA聊天室附完整代码Word文件下载.docx
《JAVA聊天室附完整代码Word文件下载.docx》由会员分享,可在线阅读,更多相关《JAVA聊天室附完整代码Word文件下载.docx(35页珍藏版)》请在冰点文库上搜索。
![JAVA聊天室附完整代码Word文件下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/8/1fdf9223-5948-42a0-a69d-961740892eb4/1fdf9223-5948-42a0-a69d-961740892eb41.gif)
用户可以选择与聊天室的在线用户列表中的其他用户聊天。
双方的聊天记录对于聊天室的其他用户是不可见的。
(5)聊天心情:
用户在聊天的过程中可以选择相应的心情来表达自己的情感。
(6)系统消息:
服务端正常运行的过程中,在聊天室的每一个用户都能接收服务器端发送的信息提示信息。
(7)用户的状态.
每一个客户端用户都可以实时看到目前其他在线用户的状态。
(8)用户注销:
用户可以注销自己的账号,并重新登记登录名和地址。
(9)用户退出:
用户可以在正常情况下退出聊天室。
(10)服务端控制:
只有在服务端开启的情况下,用户才能登陆成功和聊天;
用户设置的地址端口也必须与服务端的侦听端口一致,否则不能登录。
2、模块描述
本聊天室分为聊天室服务端和聊天室客户端,服务端与客户端之间通过套接口Socket(TCP)连接。
在java中使用套接口相当简单,JavaAPI为处理套接口的通信提供了一个类使得编写网络应用程序相对容易.服务器采用多线程以满足多用户的请求,通过JDBC与后台数据库连接,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认IP地址为:
默认端口为8888。
(1)聊天室服务端模块图:
端口服务:
输入要侦听的端口,默认为8888;
启动服务:
启动服务器,并开始在设置的端口中侦听,客户端用户可以登录并开始聊天;
停止服务:
关闭服务器,侦听结束。
客户端用户不能再聊天;
发送系统消息:
服务器端给所有人或者个别用户发送消息。
消息显示:
可以显示所有用户的聊天记录,和上线、下线信息。
退出服务器:
退出程序,并停止服务;
(2)聊天室客户端模块图:
用户设置:
用户可以设置自己的用户名进行聊天;
连接设置:
用户可以设置自己的服务器的IP地址和端口号,默认的连接地址为:
:
8888;
用户登录:
只能在聊天室服务端已开启的情况下,用户才能登录,用户登录之后才能开始聊天,登录后不能再修改用户设置和连接设置;
用户注销:
退出聊天,可以继续修改用户设置和连接设置;
发送和接收聊天信息:
用户可以给所有人或者个别用户发送信息,并能看到其他用户发送给自己或所有人的消息;
退出:
关闭所有聊天并退出客户端。
(3)流程图
设置侦听端口
默认端口:
8888
设置用户名
设置IP地址和端口
四、详细设计
1、聊天室服务器端设计:
聊天室服务端主要包括7个文件,它们的功能如下:
(1):
包含名为ChatServer的public类,其主要功能为定义服务器端的界面,添加事件侦听与事件处理。
调用ServerListen类来实现服务端用户上线与下线的侦听,调用ServerReceive类来实现服务器端的消息的收发。
(2):
该类实现服务端用户上线与下线的侦听。
该类对用户上线下线的侦听是通过调用用户链表类(UserLinkList)来实现的,当用户上线与下线情况发生变化时,该类会对主类的界面进行相应的修改。
(3):
该类是实现服务器端的消息的收发的类。
该类分别定义了向某用户及所有人发送消息的方法,发送的消息会显示在主界面类的界面上。
(4):
该类继承自JDialog,是用户对服务器端侦听端口进行修改配置的类。
(5):
用户链表的节点类,定义了链表中的用户。
该类与前面所讲的链表节点Node类的功能相当。
(6):
用户链表节点的具体实现类。
该类通过构造函数构造用户链表,定义了添加用户,删除用户、返回用户数、根据用户名查找用户、根据索引查找用户这5个方法。
(7):
服务端程序的帮助类。
2、聊天室客户端设计:
聊天室客户端主要包括5个文件,它们的功能如下:
(1):
包含名为ChatClient的public类,其主要功能为定义客户端的界面,添加事件侦听与事件处理。
该类定义了Connect()与DisConnect()方法实现与服务器的连接与断开连接。
当登录到指定的服务器时,调用ClientReceive类实现消息收发,同时该类还定义了SendMessage()方法来向其他用户发送带有表情的消息或者悄悄话。
该类是实现服务器端与客户端消息收发的类。
该类继承自JDialog,是用户对所要连接的服务器IP及侦听端口进行修改配置的类。
该类继承自JDialog,是用户对连接到服务器所显示的用户名进行修改配置的类。
客户端程序的帮助类。
五、测试数据及其结果分析
1、首先运行ChatServer工程文件,会出现如下画面
2、选择端口设置,可以设置您要侦听的端口号,不设置将默认端口号为8888;
3、选择启动服务,服务器开始在您刚才设置的端口中侦听;
4、运行ChatClient工程文件,打开如下画面
5、选择用户设置可以设置自己的登录名
6、选择连接设置可以设置您的IP地址和端口号
7、选择登录进入聊天室并可以开始跟所有人或者个别其他用户聊天,其中可以选择心情等;
8、在服务端也可以选择给所有人或者个别用户发送消息;
注意:
客户端只有在服务端开启的情况下才能正常聊天。
9、多人聊天的服务器端与客户端情况
代码如下:
packageliaotian;
/**
*用户链表
*/
publicclassUserLinkList{
Noderoot;
Nodepointer;
intcount;
/**
*构造用户链表
publicUserLinkList(){
root=newNode();
=null;
pointer=null;
count=0;
}
*添加用户
publicvoidaddUser(Noden){
pointer=root;
while!
=null){
pointer=;
}
=n;
count++;
*删除用户
publicvoiddelUser(Noden){
if==n){
=;
count--;
break;
}
*返回用户数
publicintgetCount(){
returncount;
*根据用户名查找用户
publicNodefindUser(Stringusername){
if(count==0)returnnull;
ifreturnpointer;
returnnull;
*根据索引查找用户
publicNodefindUser(intindex){
if(count==0){
returnnull;
if(index<
0){
inti=0;
while(i<
index+1){
if!
pointer=;
else{
returnnull;
i++;
returnpointer;
}
import.*;
/*
*聊天客户端的主框架类
publicclassChatClientextendsJFrameimplementsActionListener{
*
privatestaticfinallongserialVersionUID=1L;
Stringip="
"
;
etImage("
face/"
));
etScreenSize();
((int)-())/2,
(int)-())/2);
(false);
("
聊天室客户端"
);
.\n"
type=1;
.\n"
type=0;
oString();
Stringstatus="
if()){
status="
悄悄话"
Stringaction=().toString();
Stringmessage=();
return;
try{
("
聊天信息"
();
(toSomebody);
(action);
(message);
catch(Exceptione){
;
publicclassChatServerextendsJFrameimplementsActionListener{
publicstaticintport=8888;
etScreenSize();
((int)(int)(false);
("
Á
Ä
Ì
ì
Ê
Ò
·
þ
Î
ñ
¶
Ë
publicvoidinit(){
ContainercontentPane=getContentPane();
(newBorderLayout());
(portItem);
(startItem);
();
(stopItem);
(exitItem);
(serviceMenu);
(helpItem);
(helpMenu);
setJMenuBar(jMenuBar);
(false);
stopServer.setEnabled(true);
stopItem.setEnabled(true);
(true);
lose();
i++;
stopServer.setEnabled(false);
stopItem.setEnabled(false);
Ñ
¾
¹
Ø
±
Õ
\n"
ù
Ó
Ð
È
catch(Exceptione){
oString();
Stringmessage=()+"
(message);
;
*聊天客户端消息收发类
publicclassClientReceiveextendsThread{
privateJComboBoxcombobox;
privateJTextAreatextarea;
Socketsocket;
ObjectOutputStreamoutput;
ObjectInputStreaminput;
JTextFieldshowStatus;
publicClientReceive(Socketsocket,ObjectOutputStreamoutput,
ObjectInputStreaminput,JComboBoxcombobox,JTextAreatextarea,JTextFieldshowStatus){
=socket;
=output;
=input;
=combobox;
=textarea;
=showStatus;
publicvoidrun(){
while(!
()){
try{
Stringtype=(String)();
if("
系统信息"
)){
Stringsysmsg=(String)();
("
系统信息:
"
+sysmsg);
}
elseif("
服务关闭"
();
服务器已关闭!
break;
Stringmessage=(String)();
(message);
用户列表"
Stringuserlist=(String)();
Stringusernames[]=("
inti=0;
所有人"
while(i<
{
(usernames[i]);
i++;
}
(0);
("
在线用户"
++"
人"
catch(Exceptione){
}
*生成连接信息输入的对话框
*让用户输入连接服务器的IP和端口
publicclassConnectConfextendsJDialog{
JPanelpanelUserConf=newJPanel();
JButtonsave=newJButton();
JButtoncancel=newJButton();
JLabelDLGINFO=newJLabel("
默认连接设置为"
JPanelpanelSave=newJPanel();
JLabelmessage=newJLabel();
StringuserInputIp;
intuserInputPort;
JTextFieldinputIp;
JTextFieldinputPort;
publicConnectConf(JFrameframe,Stringip,intport){
super(frame,true);
=ip;
=port;
try{
jbInit();
catch(Exceptione){
((int)-400)/2+50,
(int)-600)/2+150);
privatevoidjbInit()throwsException{
(newDimension(300,130));
连接设置"
请输入服务器的IP地址:
inputIp=newJTextField(10);
(userInputIp);
inputPort=newJTextField(4);
+userInputPort);
保存"
取消"
(newGridLayout(2,2,1,1));
(inputIp);
(newJLabel("
请输入服务器的端口号:
(inputPort);
(newLabel("
(save);
(cancel);
ContainercontentPane=getContentPane();
(newBorderLayout());
(panelUserConf,;
(DLGINFO,;
(panelSave,;
import*生成设置对话框的类
publicclassHelpextendsJDialog{
*
privatestaticfinallongserialVersionUID=416L;
JPaneltitlePanel=newJPanel();
JPanelcontentPanel=newJPanel();
JPanelclosePanel=newJPanel();
JButtonclose=newJButton();
JLabeltitle=newJLabel("
聊天室服务端帮助"
JTextAreahelp=newJTextArea();
Colorbg=newColor(255,255,255);
publicHelp(JFrameframe){
((int)-400)/2,
(int)-320)/2);
(newDimension(400,200));
帮助"
(bg);
1、设置服务端的侦听端口(默认端口为8888)。
+
"
2、点击启动服务按钮便可在指定的端口启动服务。
3、选择需要接受消息的用户,在消息栏中写入消息,之后便可发送消息。
4、信息状态栏中显示服务器当前的启动与停止状态、"
用户发送的消息和\n服务器端发送的系统消息。
(title);
(help);
(close);
(titlePanel,;
(contentPanel,;
(closePanel,;
关闭"
*生成设置对话框的类
publicclassHelp1extendsJDialog{
JB