完整JAVA聊天室附完整代码Word格式文档下载.docx
- 文档编号:16717791
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:67
- 大小:303.51KB
完整JAVA聊天室附完整代码Word格式文档下载.docx
《完整JAVA聊天室附完整代码Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《完整JAVA聊天室附完整代码Word格式文档下载.docx(67页珍藏版)》请在冰豆网上搜索。
服务端正常运行的过程中,在聊天室的每一个用户都能接收服务器端发送的信息提示信息。
(7)用户的状态。
每一个客户端用户都可以实时看到目前其他在线用户的状态.
(8)用户注销:
用户可以注销自己的账号,并重新登记登录名和地址。
(9)用户退出:
用户可以在正常情况下退出聊天室.
(10)服务端控制:
只有在服务端开启的情况下,用户才能登陆成功和聊天;
用户设置的地址端口也必须与服务端的侦听端口一致,否则不能登录。
2、模块描述
本聊天室分为聊天室服务端和聊天室客户端,服务端与客户端之间通过套接口Socket(TCP)连接。
在java中使用套接口相当简单,JavaAPI为处理套接口的通信提供了一个类.Socket.,使得编写网络应用程序相对容易.服务器采用多线程以满足多用户的请求,通过JDBC与后台数据库连接,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认IP地址为:
127.0.0。
1默认端口为8888。
(1)聊天室服务端模块图:
端口服务:
输入要侦听的端口,默认为8888;
启动服务:
启动服务器,并开始在设置的端口中侦听,客户端用户可以登录并开始聊天;
停止服务:
关闭服务器,侦听结束。
客户端用户不能再聊天;
发送系统消息:
服务器端给所有人或者个别用户发送消息。
消息显示:
可以显示所有用户的聊天记录,和上线、下线信息。
退出服务器:
退出程序,并停止服务;
(2)聊天室客户端模块图:
用户设置:
用户可以设置自己的用户名进行聊天;
连接设置:
用户可以设置自己的服务器的IP地址和端口号,默认的连接地址为:
1:
8888;
用户登录:
只能在聊天室服务端已开启的情况下,用户才能登录,用户登录之后才能开始聊天,登录后不能再修改用户设置和连接设置;
用户注销:
退出聊天,可以继续修改用户设置和连接设置;
发送和接收聊天信息:
用户可以给所有人或者个别用户发送信息,并能看到其他用户发送给自己或所有人的消息;
退出:
关闭所有聊天并退出客户端.
(3)流程图
设置侦听端口
默认端口:
8888
设置用户名
设置IP地址和端口
四、详细设计
1、聊天室服务器端设计:
聊天室服务端主要包括7个文件,它们的功能如下:
(1)ChatServer.java:
包含名为ChatServer的public类,其主要功能为定义服务器端的界面,添加事件侦听与事件处理。
调用ServerListen类来实现服务端用户上线与下线的侦听,调用ServerReceive类来实现服务器端的消息的收发。
(2)ServerListen。
java:
该类实现服务端用户上线与下线的侦听。
该类对用户上线下线的侦听是通过调用用户链表类(UserLinkList)来实现的,当用户上线与下线情况发生变化时,该类会对主类的界面进行相应的修改。
(3)ServerReceive。
java:
该类是实现服务器端的消息的收发的类.该类分别定义了向某用户及所有人发送消息的方法,发送的消息会显示在主界面类的界面上.
(4)PortConf。
该类继承自JDialog,是用户对服务器端侦听端口进行修改配置的类。
(5)Node.java:
用户链表的节点类,定义了链表中的用户。
该类与前面所讲的链表节点Node类的功能相当。
(6)UserLinkList.java:
用户链表节点的具体实现类。
该类通过构造函数构造用户链表,定义了添加用户,删除用户、返回用户数、根据用户名查找用户、根据索引查找用户这5个方法。
(7)Help。
服务端程序的帮助类.
2、聊天室客户端设计:
聊天室客户端主要包括5个文件,它们的功能如下:
(1)ChatClient.java:
包含名为ChatClient的public类,其主要功能为定义客户端的界面,添加事件侦听与事件处理。
该类定义了Connect()与DisConnect()方法实现与服务器的连接与断开连接。
当登录到指定的服务器时,调用ClientReceive类实现消息收发,同时该类还定义了SendMessage()方法来向其他用户发送带有表情的消息或者悄悄话。
(2)ClientReceive。
该类是实现服务器端与客户端消息收发的类。
(3)ConnectConf.java:
该类继承自JDialog,是用户对所要连接的服务器IP及侦听端口进行修改配置的类。
(4)UserConf。
该类继承自JDialog,是用户对连接到服务器所显示的用户名进行修改配置的类.
(5)Help.java:
客户端程序的帮助类。
五、测试数据及其结果分析
1、首先运行ChatServer工程文件,会出现如下画面
2、选择端口设置,可以设置您要侦听的端口号,不设置将默认端口号为8888;
3、选择启动服务,服务器开始在您刚才设置的端口中侦听;
4、运行ChatClient工程文件,打开如下画面
5、选择用户设置可以设置自己的登录名
6、选择连接设置可以设置您的IP地址和端口号
7、选择登录进入聊天室并可以开始跟所有人或者个别其他用户聊天,其中可以选择心情等;
8、在服务端也可以选择给所有人或者个别用户发送消息;
注意:
客户端只有在服务端开启的情况下才能正常聊天.
9、多人聊天的服务器端与客户端情况
代码如下:
packageliaotian;
/**
*用户链表
*/
publicclassUserLinkList{
Noderoot;
Nodepointer;
intcount;
/**
*构造用户链表
publicUserLinkList(){
root=newNode();
root。
next=null;
pointer=null;
count=0;
}
/**
*添加用户
publicvoidaddUser(Noden){
pointer=root;
while(pointer。
next!
=null){
pointer=pointer.next;
}
pointer。
next=n;
n。
next=null;
count++;
*删除用户
*/
publicvoiddelUser(Noden){
pointer=root;
while(pointer.next!
=null){
if(pointer.next==n){
pointer。
next=n。
next;
count—-;
break;
}
pointer=pointer。
next;
}
}
*返回用户数
publicintgetCount(){
returncount;
/**
*根据用户名查找用户
publicNodefindUser(Stringusername){
if(count==0)returnnull;
pointer=pointer.next;
if(pointer.username.equalsIgnoreCase(username)){
returnpointer;
}
returnnull;
*根据索引查找用户
publicNodefindUser(intindex){
if(count==0){
returnnull;
if(index〈0){
returnnull;
inti=0;
while(i〈index+1){
if(pointer.next!
pointer=pointer。
else{
returnnull;
i++;
returnpointer;
}
importjava。
awt.*;
importjava.awt。
event。
*;
importjava.io。
*;
net.*;
importjavax.swing。
*;
/*
*聊天客户端的主框架类
publicclassChatClientextendsJFrameimplementsActionListener{
/**
*
privatestaticfinallongserialVersionUID=1L;
Stringip=”127.0。
0.1"
;
//连接到服务端的ip地址
intport=8888;
//连接到服务端的端口号
StringuserName="
狂狂"
;
//用户名
inttype=0;
//0表示未连接,1表示已连接
JComboBoxcombobox;
//选择发送消息的接受者
JTextAreamessageShow;
//客户端的信息显示
JScrollPanemessageScrollPane;
//信息显示的滚动条
JLabelexpress,sendToLabel,messageLabel;
JTextFieldclientMessage;
//客户端消息的发送
JCheckBoxcheckbox;
//悄悄话
JComboBoxactionlist;
//表情选择
JButtonclientMessageButton;
//发送消息
JTextFieldshowStatus;
//显示用户连接状态
Socketsocket;
ObjectOutputStreamoutput;
//网络套接字输出流
ObjectInputStreaminput;
//网络套接字输入流
ClientReceiverecvThread;
//建立菜单栏
JMenuBarjMenuBar=newJMenuBar();
//建立菜单组
JMenuoperateMenu=newJMenu(”操作(O)"
);
//建立菜单项
JMenuItemloginItem=newJMenuItem("
用户登录(I)"
newImageIcon("
face/98。
gif"
));
JMenuItemlogoffItem=newJMenuItem("
用户注销(L)”,newImageIcon("
face/icon。
gif”));
JMenuItemexitItem=newJMenuItem(”退出(X)”,newImageIcon("
face/smile.gif"
));
JMenuconMenu=newJMenu("
设置(C)"
);
JMenuItemuserItem=newJMenuItem(”用户设置(U)"
newImageIcon(”face/messenger_big。
gif”));
JMenuItemconnectItem=newJMenuItem("
连接设置(C)”,newImageIcon(”face/Uabrand.gif"
JMenuhelpMenu=newJMenu("
帮助(H)”);
JMenuItemhelpItem=newJMenuItem(”帮助(H)"
,newImageIcon(”face/HelpCenter。
//建立工具栏
JToolBartoolBar=newJToolBar();
//建立工具栏中的按钮组件
JButtonloginButton;
//用户登录
JButtonlogoffButton;
//用户注销
JButtonuserButton;
//用户信息的设置
JButtonconnectButton;
//连接设置
JButtonexitButton;
//退出按钮
//框架的大小
DimensionfaceSize=newDimension(400,600);
JPaneldownPanel;
GridBagLayoutgirdBag;
GridBagConstraintsgirdBagCon;
publicChatClient(){
init();
//初始化程序
//添加框架的关闭事件处理
this。
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();
//设置框架的大小
setSize(faceSize);
this.setVisible(true);
setIconImage(getToolkit().getImage("
face/love.gif”));
//设置运行时窗口的位置
DimensionscreenSize=Toolkit。
getDefaultToolkit().getScreenSize();
this.setLocation((int)(screenSize。
width-faceSize.getWidth())/2,
(int)(screenSize。
height-faceSize.getHeight())/2);
setResizable(false);
this.setTitle(”聊天室客户端"
//设置标题
//为操作菜单栏设置热键’V’
operateMenu。
setMnemonic(’O'
//为用户登录设置快捷键为ctrl+i
loginItem.setMnemonic(’I’);
loginItem。
setAccelerator(KeyStroke.getKeyStroke(KeyEvent。
VK_I,InputEvent.CTRL_MASK));
//为用户注销快捷键为ctrl+l
logoffItem。
setMnemonic('
L'
logoffItem.setAccelerator(KeyStroke。
getKeyStroke(KeyEvent.VK_L,InputEvent.CTRL_MASK));
//为退出快捷键为ctrl+x
exitItem.setMnemonic('
X'
exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent。
VK_X,InputEvent。
CTRL_MASK));
//为设置菜单栏设置热键’C’
conMenu.setMnemonic('
C’);
//为用户设置设置快捷键为ctrl+u
userItem。
U’);
userItem.setAccelerator(KeyStroke。
getKeyStroke(KeyEvent。
VK_U,InputEvent.CTRL_MASK));
//为连接设置设置快捷键为ctrl+c
connectItem。
setMnemonic(’C'
setAccelerator(KeyStroke。
getKeyStroke(KeyEvent.VK_C,InputEvent。
//为帮助菜单栏设置热键'
H'
helpMenu。
setMnemonic(’H'
//为帮助设置快捷键为ctrl+p
helpItem。
setMnemonic(’H’);
VK_H,InputEvent.CTRL_MASK));
*程序初始化函数
publicvoidinit(){
ContainercontentPane=getContentPane();
contentPane。
setLayout(newBorderLayout());
//添加菜单栏
add(loginItem);
add(logoffItem);
addSeparator();
add(exitItem);
jMenuBar。
add(operateMenu);
conMenu。
add(userItem);
addSeparator();
conMenu.add(connectItem);
jMenuBar.add(conMenu);
add(helpItem);
add(helpMenu);
setJMenuBar(jMenuBar);
//初始化按钮
loginButton=newJButton("
登录”);
logoffButton=newJButton("
注销"
userButton=newJButton("
用户设置"
);
connectButton=newJButton("
连接设置”);
exitButton=newJButton(”退出”);
//当鼠标放上显示信息
loginButton。
setToolTipText("
连接到指定的服务器"
logoffButton.setToolTipText(”与服务器断开连接"
userButton。
设置用户信息”);
connectButton.setToolTipText("
设置所要连接到的服务器信息”);
//将按钮添加到工具栏
toolBar.add(userButton);
toolBar。
add(connectButton);
toolBar.addSeparator();
//添加分隔栏
toolBar.add(loginButton);
toolBar.add(logoffButton);
add(exitButton);
add(toolBar,BorderLayout。
NORTH);
checkbox=newJCheckBox("
悄悄话”);
checkbox.setSelected(false);
actionlist=newJComboBox();
actionlist.addItem("
微笑地"
actionlist。
addItem(”高兴地"
addItem(”轻轻地"
addItem("
生气地”);
setSelectedIndex(0);
//初始时
loginButton.setEnabled(true);
logoffButton。
setEnabled(false);
//为菜单栏添加事件监听
addActionListener(this);
logoffItem.addActionListener(th
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 JAVA 聊天室 代码