JAVA聊天室Word文档下载推荐.docx
- 文档编号:22367486
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:74
- 大小:247.65KB
JAVA聊天室Word文档下载推荐.docx
《JAVA聊天室Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《JAVA聊天室Word文档下载推荐.docx(74页珍藏版)》请在冰豆网上搜索。
8888;
用户登录:
只能在聊天室服务端已开启的情况下,用户才能登录,用户登录之后才能开始聊天,登录后不能再修改用户设置和连接设置;
用户注销:
退出聊天,可以继续修改用户设置和连接设置;
发送和接收聊天信息:
用户可以给所有人或者个别用户发送信息,并能看到其他用户发送给自己或所有人的消息;
退出:
关闭所有聊天并退出客户端。
1、流程图
设置侦听端口
默认端口:
8888
设置用户名
默认连接地址或用户名
设置IP地址和端口
五.主要类UML关系图:
聊天室服务器端设计:
1、聊天室服务器端设计:
聊天室服务端主要包括7个文件,它们的功能如下:
(1)ChatServer.java:
包含名为ChatServer的public类,其主要功能为定义服务器端的界面,添加事件侦听与事件处理。
调用ServerListen类来实现服务端用户上线与下线的侦听,调用ServerReceive类来实现服务器端的消息的收发。
(2)ServerListen.java:
该类实现服务端用户上线与下线的侦听。
该类对用户上线下线的侦听是通过调用用户链表类(UserLinkList)来实现的,当用户上线与下线情况发生变化时,该类会对主类的界面进行相应的修改。
(3)ServerReceive.java:
该类是实现服务器端的消息的收发的类。
该类分别定义了向某用户及所有人发送消息的方法,发送的消息会显示在主界面类的界面上。
(4)PortConf.java:
该类继承自JDialog,是用户对服务器端侦听端口进行修改配置的类。
(5)Node.java:
用户链表的节点类,定义了链表中的用户。
该类与前面所讲的链表节点Node类的功能相当。
(6)UserLinkList.java:
用户链表节点的具体实现类。
该类通过构造函数构造用户链表,定义了添加用户,删除用户、返回用户数、根据用户名查找用户、根据索引查找用户这5个方法。
(7)Help.java:
服务端程序的帮助类。
聊天室客户端设计:
聊天室客户端主要包括5个文件,它们的功能如下:
(1)ChatClient.java:
包含名为ChatClient的public类,其主要功能为定义客户端的界面,添加事件侦听与事件处理。
该类定义了Connect()与DisConnect()方法实现与服务器的连接与断开连接。
当登录到指定的服务器时,调用ClientReceive类实现消息收发,同时该类还定义了SendMessage()方法来向其他用户发送带有表情的消息或者悄悄话。
(2)ClientReceive.java:
该类是实现服务器端与客户端消息收发的类。
(3)ConnectConf.java:
该类继承自JDialog,是用户对所要连接的服务器IP及侦听端口进行修改配置的类。
(4)UserConf.java:
该类继承自JDialog,是用户对连接到服务器所显示的用户名进行修改配置的类。
(5)Help.java:
客户端程序的帮助类。
六.主要程序代码清单和注释说明:
******************ChatServer.java****************************************
publicvoidactionPerformed(ActionEvente){
Objectobj=e.getSource();
if(obj==startServer||obj==startItem){//启动服务端
startService();
}
elseif(obj==stopServer||obj==stopItem){//停止服务端
intj=JOptionPane.showConfirmDialog(
this,"
真的停止服务吗?
"
"
停止服务"
JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);
if(j==JOptionPane.YES_OPTION){
stopService();
}
elseif(obj==portSet||obj==portItem){//端口设置
//调出端口设置的对话框
PortConfportConf=newPortConf(this);
portConf.show();
elseif(obj==exitButton||obj==exitItem){//退出程序
真的要退出吗?
退出"
System.exit(0);
elseif(obj==helpItem){//菜单栏中的帮助
//调出帮助对话框
HelphelpDialog=newHelp(this);
helpDialog.show();
elseif(obj==sysMessage||obj==sysMessageButton){//发送系统消息
sendSystemMessage();
}
/**
*启动服务端
*/
publicvoidstartService(){
try{
serverSocket=newServerSocket(port,10);
messageShow.append("
服务端已经启动,在"
+port+"
端口侦听...\n"
);
startServer.setEnabled(false);
startItem.setEnabled(false);
portSet.setEnabled(false);
portItem.setEnabled(false);
stopServer.setEnabled(true);
stopItem.setEnabled(true);
sysMessage.setEnabled(true);
catch(Exceptione){
//System.out.println(e);
userLinkList=newUserLinkList();
listenThread=newServerListen(serverSocket,combobox,
messageShow,showStatus,userLinkList);
listenThread.start();
*关闭服务端
publicvoidstopService(){
//向所有人发送服务器关闭的消息
sendStopToAll();
listenThread.isStop=true;
serverSocket.close();
intcount=userLinkList.getCount();
inti=0;
while(i<
count){
Nodenode=userLinkList.findUser(i);
node.input.close();
node.output.close();
node.socket.close();
i++;
stopServer.setEnabled(false);
stopItem.setEnabled(false);
startServer.setEnabled(true);
startItem.setEnabled(true);
portSet.setEnabled(true);
portItem.setEnabled(true);
sysMessage.setEnabled(false);
服务端已经关闭\n"
combobox.removeAllItems();
combobox.addItem("
所有人"
catch(Exceptione){
*向所有人发送服务器关闭的消息
publicvoidsendStopToAll(){
intcount=userLinkList.getCount();
inti=0;
while(i<
Nodenode=userLinkList.findUser(i);
if(node==null){
continue;
try{
node.output.writeObject("
服务关闭"
node.output.flush();
catch(Exceptione){
//System.out.println("
$$$"
+e);
i++;
*向所有人发送消息
publicvoidsendMsgToAll(Stringmsg){
//用户总数
系统信息"
node.output.writeObject(msg);
@@@"
sysMessage.setText("
*向客户端用户发送消息
publicvoidsendSystemMessage(){
StringtoSomebody=combobox.getSelectedItem().toString();
Stringmessage=sysMessage.getText()+"
\n"
;
messageShow.append(message);
//向所有人发送消息
if(toSomebody.equalsIgnoreCase("
)){
sendMsgToAll(message);
else{
//向某个用户发送消息
Nodenode=userLinkList.findUser(toSomebody);
node.output.writeObject(message);
catch(Exceptione){
!
sysMessage.setText("
//将发送消息栏的消息清空
publicstaticvoidmain(String[]args){
ChatServerapp=newChatServer();
}
************************ServerListen.java:
***************************
publicclassServerListenextendsThread{
ServerSocketserver;
JComboBoxcombobox;
JTextAreatextarea;
JTextFieldtextfield;
UserLinkListuserLinkList;
//用户链表
Nodeclient;
ServerReceiverecvThread;
publicbooleanisStop;
/*
*聊天服务端的用户上线于下线侦听类
publicServerListen(ServerSocketserver,JComboBoxcombobox,
JTextAreatextarea,JTextFieldtextfield,UserLinkListuserLinkList){
this.server=server;
bobox=combobox;
this.textarea=textarea;
this.textfield=textfield;
this.userLinkList=userLinkList;
isStop=false;
publicvoidrun(){
while(!
isStop&
&
!
server.isClosed()){
client=newNode();
client.socket=server.accept();
client.output=newObjectOutputStream(client.socket.getOutputStream());
client.output.flush();
client.input=newObjectInputStream(client.socket.getInputStream());
client.username=(String)client.input.readObject();
//显示提示信息
combobox.addItem(client.username);
userLinkList.addUser(client);
textarea.append("
用户"
+client.username+"
上线"
+"
textfield.setText("
在线用户"
+userLinkList.getCount()+"
人\n"
recvThread=newServerReceive(textarea,textfield,
combobox,client,userLinkList);
recvThread.start();
********************************ServerReceive.java***********************
/*
*服务器收发消息的类
publicclassServerReceiveextendsThread{
publicServerReceive(JTextAreatextarea,JTextFieldtextfield,
JComboBoxcombobox,Nodeclient,UserLinkListuserLinkList){
this.client=client;
//向所有人发送用户的列表
sendUserList();
client.socket.isClosed()){
Stringtype=(String)client.input.readObject();
if(type.equalsIgnoreCase("
聊天信息"
StringtoSomebody=(String)client.input.readObject();
Stringstatus=(String)client.input.readObject();
Stringaction=(String)client.input.readObject();
Stringmessage=(String)client.input.readObject();
Stringmsg=client.username
+"
"
+action
+"
对"
+toSomebody
说:
+message
if(status.equalsIgnoreCase("
悄悄话"
msg="
[悄悄话]"
+msg;
}
textarea.append(msg);
if(toSomebody.equalsIgnoreCase("
sendToAll(msg);
//向所有人发送消息
else{
try{
client.output.writeObject("
client.output.flush();
client.output.writeObject(msg);
}
catch(Exceptione){
//System.out.println("
###"
Nodenode=userLinkList.findUser(toSomebody);
if(node!
=null){
node.output.writeObject("
node.output.flush();
node.output.writeObject(msg);
}
elseif(type.equalsIgnoreCase("
用户下线"
Nodenode=userLinkList.findUser(client.username);
userLinkList.delUser(node);
Stringmsg="
+client.username+
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 聊天室