JAVA聊天室附完整代码.docx
- 文档编号:18243578
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:75
- 大小:301.10KB
JAVA聊天室附完整代码.docx
《JAVA聊天室附完整代码.docx》由会员分享,可在线阅读,更多相关《JAVA聊天室附完整代码.docx(75页珍藏版)》请在冰点文库上搜索。
JAVA聊天室附完整代码
专业课程设计I
基于JAVA的聊天室设计与实现
一、课题内容和要求
基于网络的文本交互软件的设计和实现,设计和实现一个简单的基于网络的文本消息发送和接收软件。
基本要求:
该软件能实现文本消息发送和接收功能。
提高要求
(1):
支持以多播方式发送文本消息,提高要求
(2):
性能稳定,界面友好。
按课程设计报告的要求写出详细的设计和实现报告。
二、设计思路分析
聊天室是一项进行文本交互的软件,应用广泛,并且实用性强的一个非常典型的人机交互系统。
在信息世界里,聊天工具的使用是非常频繁的,如MSN、QQ、校内通之类的聊天工具许多人都正在使用。
此次设计的聊天室系统主要针对文本信息的传送和接收,不能像QQ一样进行图片、音频、视频等文件的传输。
虽然其功能简单,但是在开发技术和过程中,能够充分学习和使用JAVA的技术,进一步培养了面向对象程序设计的思想,加深对面向对象程序设计四大特性的理解。
人们日常生活中越来越多地使用聊天室这项应用来为自己的工作和学习服务。
一个操作简单,界面友好、运行稳定的聊天室对于小型局域网的用户可以起到很好的交流作用。
所谓聊天室就是一个可以让许多用户同时互相通信的网上园地,个人用户可以通过聊天室将自己融入整个主流社会中。
根据目前使用聊天室的用户需求显示,用户对于聊天室主要有以下几点要求:
(1)聊天功能:
可以实时接收和发送信息,并能支持公聊和私聊的的方式,能够查看聊天记录,聊天过程中能对字体、表情等进行设定等。
(2)用户功能:
可以随时注册和登录及注销,并能选择性加好友和删除好友以及查看对方的开放信息,还能看到对方的登录状态。
(3)文件传输功能:
用户可以共享资源,能发送及接收文件。
(4)保密功能:
用户可以设定自己的保密状态,使某些信息对于其他用户是不可见的。
(5)系统稳定:
客户端与服务端的连接稳定,不出现或者少出现连接不上的情况。
三、概要设计
1、聊天室的简要功能介绍
该简易聊天室是为许多喜爱聊天的用户开发设计的,和许多大型的网络聊天室相比该小聊天室功能比较简单,但能实现基本的聊天功能,点对多、点对点聊天和基本的用户功能,登录、注销、查看在线用户等。
(1)用户设置:
功能描述:
用户自定义自己的登录名,成功设置后,服务端能接收到新设置的用户名;
(2)登录功能:
功能描述:
在服务端开启的情况下,用户可以以自己自定义或者默认的登录名和登录地址端口登录到客户端,并能在服务器端显示登录状态;
(3)公聊:
功能描述:
用户在聊天室中可以选择与“所有人”聊天,聊天室中的其他在线用户可以正常接收并正确显示公聊消息。
(4)私聊:
功能描述:
用户可以选择与聊天室的在线用户列表中的其他用户聊天。
双方的聊天记录对于聊天室的其他用户是不可见的。
(5)聊天心情:
功能描述:
用户在聊天的过程中可以选择相应的心情来表达自己的情感。
(6)系统消息:
功能描述:
服务端正常运行的过程中,在聊天室的每一个用户都能接收服务器端发送的信息提示信息。
(7)用户的状态.
功能描述:
每一个客户端用户都可以实时看到目前其他在线用户的状态。
(8)用户注销:
功能描述:
用户可以注销自己的账号,并重新登记登录名和地址。
(9)用户退出:
功能描述:
用户可以在正常情况下退出聊天室。
(10)服务端控制:
功能描述:
只有在服务端开启的情况下,用户才能登陆成功和聊天;用户设置的地址端口也必须与服务端的侦听端口一致,否则不能登录。
2、模块描述
本聊天室分为聊天室服务端和聊天室客户端,服务端与客户端之间通过套接口Socket(TCP)连接。
在java中使用套接口相当简单,JavaAPI为处理套接口的通信提供了一个类.Socket.,使得编写网络应用程序相对容易.服务器采用多线程以满足多用户的请求,通过JDBC与后台数据库连接,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认IP地址为:
127.0.0.1默认端口为8888。
(1)聊天室服务端模块图:
端口服务:
输入要侦听的端口,默认为8888;
启动服务:
启动服务器,并开始在设置的端口中侦听,客户端用户可以登录并开始聊天;
停止服务:
关闭服务器,侦听结束。
客户端用户不能再聊天;
发送系统消息:
服务器端给所有人或者个别用户发送消息。
消息显示:
可以显示所有用户的聊天记录,和上线、下线信息。
退出服务器:
退出程序,并停止服务;
(2)聊天室客户端模块图:
用户设置:
用户可以设置自己的用户名进行聊天;
连接设置:
用户可以设置自己的服务器的IP地址和端口号,默认的连接地址为:
127.0.0.1:
8888;
用户登录:
只能在聊天室服务端已开启的情况下,用户才能登录,用户登录之后才能开始聊天,登录后不能再修改用户设置和连接设置;
用户注销:
退出聊天,可以继续修改用户设置和连接设置;
发送和接收聊天信息:
用户可以给所有人或者个别用户发送信息,并能看到其他用户发送给自己或所有人的消息;
退出:
关闭所有聊天并退出客户端。
(3)流程图
设置侦听端口
默认端口:
8888
设置用户名
设置IP地址和端口
四、详细设计
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:
服务端程序的帮助类。
2、聊天室客户端设计:
聊天室客户端主要包括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:
客户端程序的帮助类。
五、测试数据及其结果分析
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=root;
while(pointer.next!
=null){
pointer=pointer.next;
if(pointer.username.equalsIgnoreCase(username)){
returnpointer;
}
}
returnnull;
}
/**
*根据索引查找用户
*/
publicNodefindUser(intindex){
if(count==0){
returnnull;
}
if(index<0){
returnnull;
}
pointer=root;
inti=0;
while(i if(pointer.next! =null){ pointer=pointer.next; } else{ returnnull; } i++; } returnpointer; } } packageliaotian; importjava.awt.*; importjava.awt.event.*; importjava.io.*; import.*; 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.gif")); //建立工具栏 JToolBartoolBar=newJToolBar(); //建立工具栏中的按钮组件 JButtonloginButton;//用户登录 JButtonlogoffButton;//用户注销 JButtonuserButton;//用户信息的设置 JButtonconnectButton;//连接设置 JButtonexitButton;//退出按钮 //框架的大小 DimensionfaceSize=newDimension(400,600); JPaneldownPanel; GridBagLayoutgirdBag; GridBagConstraintsgirdBagCon; publicChatClient(){ init();//初始化程序 //添加框架的关闭事件处理 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.pack(); //设置框架的大小 this.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); this.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.setMnemonic('U'); userItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U,InputEvent.CTRL_MASK)); //为连接设置设置快捷键为ctrl+c connectItem.setMnemonic('C'); connectItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK)); //为帮助菜单栏设置热键'H' helpMenu.setMnemonic('H'); //为帮助设置快捷键为ctrl+p helpItem.setMnemonic('H'); helpItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,InputEvent.CTRL_MASK)); } /** *程序初始化函数 */ publicvoidinit(){ ContainercontentPane=getContentPane(); contentPane.setLayout(newBorderLayout()); //添加菜单栏 operateMenu.add(loginItem); operateMenu.add(logoffItem); operateMenu.addSeparator(); operateMenu.add(exitItem); jMenuBar.add(operateMenu); conMenu.add(userItem); conMenu.addSeparator(); conMenu.add(connectItem); jMenuBar.add(conMenu); helpMenu.add(helpItem); jMenuBar.add(helpMenu); setJMenuBar(jMenuBar); //初始化按钮 loginButton=newJButton("登录"); logoffButton=newJButton("注销"); userButton=newJButton("用户设置"); connectButton=newJButton("连接设置"); exitButton=newJButton("退出"); //当鼠标放上显示信息 loginButton.setToolTipText("连接到指定的服务器"); logoffButton.setToolTipText("与服务器断开连接"); userButton.setToolTipText("设置用户信息"); connectButton.setToolTipText("设置所要连接到的服务器信息"); //将按钮添加到工具栏 toolBar.add(userButton); toolBar.add(connectButton); toolBar.addSeparator();//添加分隔栏 toolBar.add(loginButton); toolBar.add(logoffButton); toolBar.addSeparator();//添加分隔栏 toolBar.add(exitButton); contentPane.add(toolBar,BorderLayout.NORTH); checkbox=newJCheckBox("悄悄话"); checkbox.setSelected(false); actionlist=newJComboBox(); actionlist.addItem("微笑地"); actionlist.addItem("高兴地"); actionlist.addItem("轻轻地"); actionlist.addItem("生气地"); actionlist.setSelectedIndex(0); //初始时 loginButton.setEnabled(true); logoffButton.setEnabled(false); //为菜单栏添加事件监听 loginItem.addActionListener(this); logoffItem.addActionListener(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 聊天室 完整 代码