JAVA聊天室附完整代码_第1页
JAVA聊天室附完整代码_第2页
JAVA聊天室附完整代码_第3页
JAVA聊天室附完整代码_第4页
JAVA聊天室附完整代码_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、专业课程设计I基于JAVA 的聊天室设计与实现一、课题内容和要求基于网络的文本交互软件的设计和实现, 设计和实现一个简单的基于网络的文本消息发送和接收软件。基本要求:该软件能实现文本消息发送和接收功能。提高要求 (1):支持以多播方式发送文本消息,提高要求(2) :性能稳定,界面友好。按课程设计报告的要求写出详细的设计和实现报告。二、设计思路分析聊天室是一项进行文本交互的软件, 应用广泛, 并且实用性强的一个非常典型的人机交互系统。在信息世界里,聊天工具的使用是非常频繁的,如MSN、QQ、校内通之类的聊天工具许多人都正在使用。此次设计的聊天室系统主要针 对文本信息的传送和接收,不能像QQ 一样

2、进行图片、音频、视频等文件的传输。 虽然其功能简单,但是在开发技术和过程中,能够充分学习和使用JAVA的技术, 进一步培养了面向对象程序设计的思想, 加深对面向对象程序设计四大特性的理 解。人们日常生活中越来越多地使用聊天室这项应用来为自己的工作和学习服务。一个操作简单,界面友好、运行稳定的聊天室对于小型局域网的用户可以起到很好的交流作用。所谓聊天室就是一个可以让许多用户同时互相通信的网上园地,个人用户可以通过聊天室将自己融入整个主流社会中。根据目前使用聊天室的用户需求显示,用户对于聊天室主要有以下几点要求:(1)聊天功能:可以实时接收和发送信息, 并能支持公聊和私聊的的方式, 能够查看聊天记

3、录,聊天过程中能对字体、表情等进行设定等。(2)用户功能:可以随时注册和登录及注销, 并能选择性加好友和删除好友以及查看对方的开放信息,还能看到对方的登录状态。(3)文件传输功能:用户可以共享资源,能发送及接收文件。(4)保密功能: 用户可以设定自己的保密状态, 使某些信息对于其他用户是不 可见的。(5)系统稳定: 客户端与服务端的连接稳定, 不出现或者少出现连接不上的情 况。三、概要设计1 、聊天室的简要功能介绍该简易聊天室是为许多喜爱聊天的用户开发设计的, 和许多大型的网络聊天室相比该小聊天室功能比较简单,但能实现基本的聊天功能,点对多、 点对点聊 天和基本的用户功能,登录、注销、查看在线

4、用户等。(1) 用户设置:功能描述:用户自定义自己的登录名,成功设置后,服务端能接收到新设置 的用户名;(2)登录功能:功能描述:在服务端开启的情况下,用户可以以自己自定义或者默认的登录 名和登录地址端口登录到客户端,并能在服务器端显示登录状态;公聊:功能描述:用户在聊天室中可以选择与“所有人”聊天,聊天室中的其他在 线用户可以正常接收并正确显示公聊消息。私聊:功能描述:用户可以选择与聊天室的在线用户列表中的其他用户聊天。双方的聊天记录对于聊天室的其他用户是不可见的。(5)聊天心情:功能描述:用户在聊天的过程中可以选择相应的心情来表达自己的情感。(6)系统消息:功能描述:服务端正常运行的过程中

5、,在聊天室的每一个用户都能接收服务 器端发送的信息提示信息。(7)用户的状态.功能描述:每一个客户端用户都可以实时看到目前其他在线用户的状态。(8)用户注销:功能描述:用户可以注销自己的账号,并重新登记登录名和地址。(9)用户退出:功能描述:用户可以在正常情况下退出聊天室。(10)服务端控制:功能描述:只有在服务端开启的情况下,用户才能登陆成功和聊天;用户设 置的地址端口也必须与服务端的侦听端口一致,否则不能登录。2、模块描述本聊天室分为聊天室服务端和聊天室客户端,服务端与客户端之间通过套接口 Socket(TCRB接。在java中使用套接口相当简单,Java AP为处理套接口的通 信提供了一

6、个类使得编写网络应用程序相对容易. 服务器采用多线程以满足多用 户的请求,通过JDBCW后台数据库连接,并通过创建一个 ServerSocke株寸象来 监听来自客户的连接请求,默认IP地址为:默认端口为8888。(1)聊天室服务端模块图:端口服务:输入要侦听的端口,默认为 8888;启动服务:启动服务器,并开始在设置的端口中侦听,客户端用户可以登录 并开始聊天;停止服务:关闭服务器,侦听结束。客户端用户不能再聊天;发送系统消息:服务器端给所有人或者个别用户发送消息。消息显示:可以显示所有用户的聊天记录,和上线、下线信息。退出服务器:退出程序,并停止服务;(2)聊天室客户端模块图:用户设置:用户

7、可以设置自己的用户名进行聊天;连接设置:用户可以设置自己的服务器的IP地址和端口号,默认的连接地址为: 8888;用户登录:只能在聊天室服务端已开启的情况下,用户才能登录,用户登录之后才能开始聊天,登录后不能再修改用户设置和连接设置;用户注销:退出聊天,可以继续修改用户设置和连接设置;发送和接收聊天信息:用户可以给所有人或者个别用户发送信息,并能看到其他 用户发送给自己或所有人的消息; 退出:关闭所有聊天并退出客户端。(3)流程图四、详细设计1、聊天室服务器端设计:JFrameActionListener2X ZXThread ChatServer-portpublic static in-s

8、erverSocket:ServerSocket-messageShow:JTextArea -userLinkList:UserLinkList-showStatusJTextField+ ChatServer():public +init():public void +startService():public void +stopService():public void +sendStopToAll():public void +sendMsgToAll(String):public void + sendSystemMessage():public voidServerListen-

9、 server: ServerSocket- userLinkList :UserLinkList- isStop: public BooleanSServerisisten(ServerSocket,JComboBox,JTextArea,JTextm沾禳veLSocket)- userLinkList :UserLinkListSeSoRpUevcBoolean.+t§xtarea:iJTnxtAeeveSocket,JComboBox,JTextAea,JTux晒nk甘se run轴nkList- isStop: public Boolean+ServerListen(Serv

10、erSocket,JComboBox,JTextArea,JTextField,UserLinkList)聊天室服务端主要包括7个文件,它们的功能如下:(1):包含名为ChatServer的public类,其主要功能为定义服务器端的界面, 添加事件侦听与事件处理。调用 ServerListen类来实现服务端用户上线与下线的 侦听,调用ServerReceiv睽来实现服务器端的消息的收发。(2):该类实现服务端用户上线与下线的侦听。该类对用户上线下线的侦听 是通过调用用户链表类(UserLinkList来实现的,当用户上线与下线情况发生变 化时,该类会对主类的界面进行相应的修改。(3):该类是实

11、现服务器端的消息的收发的类。该类分别定义了向某用户及 所有人发送消息的方法,发送的消息会显示在主界面类的界面上。(4):该类继承自JDialog,是用户对服务器端侦听端口进行修改配置的类。(5):用户链表的节点类,定义了链表中的用户。该类与前面所讲的链表节 点Node类的功能相当。(6):用户链表节点的具体实现类。该类通过构造函数构造用户链表,定义 了添加用户,删除用户、返回用户数、根据用户名查找用户、根据索引查找用户 这5个方法。(7):服务端程序的帮助类。2、聊天室客户端设计:聊天室客户端主要包括5个文件,它们的功能如下:(1):包含名为ChatClient的public类,其主要功能为定

12、义客户端的界面, 添加事件侦听与事件处理。该类定义了Connect()W Disconnect(方法实现与服务器的连接与断开连接。当登录到指定的服务器时,调用ClientReceive类实现消息收发,同时该类还定义了SendMessage方法来向其他用户发送带有表情的消息或者悄悄话。(2):该类是实现服务器端与客户端消息收发的类。(3):该类继承自JDialog是用户对所要连接的服务器IP及侦听端口进行修 改配置的类。(4):该类继承自JDialog,是用户对连接到服务器所显示的用户名进行修改 配置的类。(5):客户端程序的帮助类。五、测试数据及其结果分析1、首先运行ChatServer工程文

13、件,会出现如下画面眼势;端口毂苜后的眼警信/耀猗 EX关璘手;所有A ,发曲E用本:漆2、选择端口设置,可以设置您要侦听的端口号,不设置将默认端口号为8888;运口转X诺输入应听的端口号:gggg默认端口号为出888保存 取消3、选择启动服务,服务器开始在您刚才设置的端口中侦听;4、运行ChatClient工程文件,打开如下画面H 美上客户片Q-区悚作中谛百IG iffflih).近接也重 盘呈pml 退出i年正用工S 10 ?1 ?/ 一: .:汩而爱送会 MWA * 奥懵:出箕时,口楷情话支送隋邮| 拉市雄用户1 A5、选择用户设置可以设置自己的登录名6、选择连接设置可以设置您的IP地址和

14、端口号7、选择登录进入聊天室并可以开始跟所有人或者个别其他用户聊天,其中可以 选择心情等;8、在服务端也可以选择给所有人或者个别用户发送消息;注意:客户端只有在服务端开启的情况下才能正常聊天9、多人聊天的服务器端与客户端情况代码如下:package liaotian;/*用户链表*/ public class UserLinkList Node root;Node pointer;int count;/*构造用户链表*/public UserLinkList()root = new Node();=null;pointer = null;count = 0;/*添加用户*/public voi

15、d addUser(Node n) pointer = root;while != null) pointer = ;= n;= null;count+;/*删除用户*/public void delUser(Node n) pointer = root;while != null)if = n)Jcount -;break;pointer = ;/*返回用户数*/public int getCount() return count;/* 根据用户名查找用户*/public Node findUser(String username) if(count = 0) return null;poi

16、nter = root;while != null)return pointer;pointer = ; ifreturn null;/* 根据索引查找用户*/public Node findUser(int index) if(count = 0) return null;if(index < 0) return null;pointer = root;int i = 0;while(i < index + 1)if != null)pointer = ;elsereturn null;i+;return pointer;package liaotian;import .*;*i

17、mport import .*;import .*; /* 聊天客户端的主框架类*/public class ChatClient extends JFrame implements ActionListener /*/private static final long serialVersionUID = 1L;String ip = ""etImage("face/");etScreenSize();( (int) - () / 2,(int) - () / 2);(false);("聊天室客户端"); .n");typ

18、e = 1;.n");type = 0;oString();String status = ""if()status = " 悄悄话 "String action = ().toString();String message = ();if()return ;try("聊天信息 ");();(toSomebody);();(action);();(action);();(message);();catch (Exception e);import .*;import .*;public class ChatServer ex

19、tends JFrame implements ActionListenerpublic static int port=8888;etScreenSize();(int) (int) (false);("a 至iet?”);public void init()Container contentPane = getContentPane();(new BorderLayout();(portItem);(startItem);();(stopItem);();(exitItem);(serviceMenu);(helpItem);(helpMenu);setJMenuBar(jMen

20、uBar);.n");(false);(false);(false);(false);stopServer .setEnabled(true);stopItem .setEnabled(true); (true);catch (Exception e)lose();i +;stopServer .setEnabled(false); stopItem .setEnabled(false); (true);(true);(true);(true);(false);("t? o?-1? ±An");();("? uDbe ?"); cat

21、ch(Exception e)oString();String message = () + "n" (message);import .*; import .*; /* 聊天客户端消息收发类*/public class ClientReceive extends Thread private JComboBox combobox;private JTextArea textarea;Socket socket;ObjectOutputStream output;ObjectInputStream input;JTextField showStatus;public Cli

22、entReceive(Socket socket,ObjectOutputStream output, ObjectInputStream input,JComboBox combobox,JTextArea textarea,JTextField showStatus)= socket;= output;= input;= combobox;= textarea;= showStatus;public void run()while(!()tryString type = (String)();if(" 系统信息 ")String sysmsg = (String)();

23、(" 系统信息: "+sysmsg);else if("服务关闭")();();();("服务器已关闭!n");break;else if("聊天信息")String message = (String)();(message);else if("用户列表")String userlist = (String)();String usernames = ("n");();int i =0;("所有人 ");while(i < (usernamesi)

24、;i +;(0);("在线用户 " + + " 人 ");catch (Exception e )package liaotian;import .*;import*import .*;/* 生成连接信息输入的对话框* 让用户输入连接服务器的 IP 和端口*/public class ConnectConf extends JDialog /*/private static final long serialVersionUID = 1L;JPanel panelUserConf = new JPanel();JButton save = new JBu

25、tton();JButton cancel = new JButton();默认连接设置为");JLabel DLGINFO=new JLabel("JPanel panelSave = new JPanel();JLabel message = new JLabel();String userInputIp; int userInputPort;JTextField inputIp;JTextField inputPort;public ConnectConf(JFrame frame,String ip,int port) super(frame, true);= ip

26、;= port;try jbInit();catch (Exception e) ();etScreenSize();( (int) - 400) / 2 + 50,(int) - 600) / 2 + 150);(false);private void jbInit() throws Exception (new Dimension(300, 130);("连接设置 ");("请输入服务器的IP地址:");inputIp = new JTextField(10);(userInputIp);inputPort = new JTextField(4);(

27、""+userInputPort);("保存 ");("取消 ");(new GridLayout(2,2,1,1);(message);(inputIp);(new JLabel(" 请输入服务器的端口号:");(inputPort);(new Label("");(save);(cancel);(new Label("");Container contentPane = getContentPane();(new BorderLayout();(panelUserConf

28、, ;(DLGINFO, ;(panelSave, ;importimport .*;import*/J* 生成设置对话框的类public class Help extends JDialog /*/private static final long serialVersionUID = 416L;JPanel titlePanel = new JPanel();JPanel contentPanel = new JPanel();JPanel closePanel = new JPanel();JButton close = new JButton();JLabel title = new

29、JLabel(" 聊天室服务端帮助 ");JTextArea help = new JTextArea();Color bg = new Color(255,255,255);public Help(JFrame frame) super(frame, true);try jbInit();catch (Exception e) ();etScreenSize();( (int) - 400) / 2,(int) - 320) / 2);(false);private void jbInit() throws Exception (new Dimension(400, 20

30、0);("帮助 ");(bg);(bg);(bg);("1 、设置服务端的侦听端口(默认端口为8888 ) 。 n"+"2 、点击启动服务 按钮便可在指定的端口启动服务。n"+"3 、 选择需要接受消息的用户, 在消息栏中写入消息, 之后便可发送消息。 n"+"4 、信息状态栏中显示服务器当前的启动与停止状态、 "+" 用户发送的消息和n 服务器端发送的系统消息。 ");(false);(new Label("");(title);(new Label(&

31、quot;");(help);(new Label("");(close);(new Label("");Container contentPane = getContentPane();(new BorderLayout();(titlePanel, ;(contentPanel, ;(closePanel, ;("关闭 ");import/*J* 生成设置对话框的类*/public class Help1 extends JDialog /*/private static final long serialVersion

32、UID = 1L;JPanel titlePanel = new JPanel();JPanel contentPanel = new JPanel();JPanel closePanel = new JPanel();JButton close = new JButton();JLabel title = new JLabel(" 聊天室客户端帮助 ");JTextArea help = new JTextArea();Color bg = new Color(255,255,255);public Help1(JFrame frame) super(frame, tru

33、e);try jbInit();catch (Exception e) ();etScreenSize();( (int) - 400) / 2 + 25,(int) - 320) / 2);(false);private void jbInit() throws Exception (new Dimension(350, 270);("帮助 ");(bg);(bg);(bg);("1 、设置所要连接服务端的 IP 地址和端口 "+" (默认设置为 n ) 。 n"+"2、输入你的用户名(默认设置为 :狂狂) 。 n&quo

34、t;+"3 、点击“登录”便可以连接到指定的服务器; n"+" 点击“注销”可以和服务器端开连接。 n"+n"+"4、选择需要接受消息的用户,在消息栏中写入消息," 同时选择表情,之后便可发送消息。 n");(false);(new Label("");(title);(new Label("");(help);(new Label("");(close);(new Label("");Container contentPane = g

35、etContentPane();(new BorderLayout();(titlePanel, ;(contentPanel, ;(closePanel, ;("关闭 ");import .*;/* 用户链表的结点类*/ public class Node String username = null;Socket socket = null;ObjectOutputStream output = null;ObjectInputStream input = null;Node next = null;package liaotian;import .*;import .

36、*;import .*;import .*;import * 生成端口设置对话框的类*/ public class PortConf extends JDialog JPanel panelPort = new JPanel();JButton save = new JButton();JButton cancel = new JButton();public static JLabel DLGINFO=new JLabel("默认端口号为 :8888");JPanel panelSave = new JPanel();JLabel message = new JLabel

37、();public static JTextField portNumber ;public PortConf(JFrame frame) super(frame, true);try jbInit();catch (Exception e) ();etScreenSize();( (int) - 400) / 2 + 50,(int) - 600) / 2 + 150); (false);private void jbInit() throws Exception (new Dimension(300, 120);("端口设置 ");("请输入侦听的端口号:&q

38、uot;);portNumber = new JTextField(10);(""+;("保存 ");("取消 ");(new FlowLayout();(message);(portNumber);(new Label("");(save);(cancel);(new Label("");Container contentPane = getContentPane();(new BorderLayout();(panelPort, ;(DLGINFO, ;(panelSave, ;import

39、 .*;*import .*;importimport .*;public class ServerListen extends Thread ServerSocket server;JComboBox combobox;JTextArea textarea;JTextField textfield;UserLinkList userLinkList;import .*;import .*;public class ServerReceive extends Thread JTextArea textarea;JTextField textfield;JComboBox combobox;Node client;UserLinkList userLinkList;import* 生成用户信息输入对话框的类* 让用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论