《Java实现的聊天系统实验报告》由会员分享,可在线阅读,更多相关《Java实现的聊天系统实验报告(32页珍藏版)》请在金锄头文库上搜索。
1、第 1 页 共 32 页Java 实现的聊天系统实验报告第一章 系统概述本实验完成的聊天系统是一个 C/S 体系结构网络程序的实例,其操作原理为:服务器程序会等待客户端联机,当有用户要求加入聊天室且联机成功后,便可开始发送消息,这些消息将会以广播的方式传送给所有其他在聊天室中的成员。第二章 系统框架21 网络架构以 Socket 通信机制实现聊天程序。允许多个客户机连接,并设置广播、私语等多种聊天方式。服务器用 ServerSocket “侦听”进入的连接;客户机用 Socket 初始一次连接。一旦客户(程序)申请建立一个套接字连接,ServerSocket 就会返回(通过 accept()方
2、法)一个对应的服务器端套接字,以便进行直接通信。1 服务器通过 ServerListen 这个线程来监听、负责响应客户端的的各种信息,包括用户的登陆,用户的注册,各个客户端的信息相互转发。2 客户端负责为用户提供登陆界面,将信息发送至服务器,通过 ClientReceive 类负责与服务器其它客户端的通信工作。22 系统架构本实验完成的聊天系统是一个 C/S 体系结构网络程序的实例,用户可以在客户端注册,登陆,与在线好友及私聊或群聊,能够查看在线用户,查看好友列表,修改个人信息!第 2 页 共 32 页23 模块功能说明服务器程序(1)能等待用户联机,并建立和客户端通信的 I/O 通道;(2)
3、 当有用户要求加入聊天室,先验证其帐号和密码的合法性,验证成功后允许联机并将登陆信息写入日志 log 表;(3)能将用户发来的信息存入数据库保存,以便查询统计,同时能将消息广播给所有聊天室成员;(4)能清除不正常终端的联机;(5)系统管理:能设置加入聊天系统的人数限制,能查看用户登陆信息和聊天信息。客户端程序(1)提供用户的注册、登陆及连接服务器时 ip,port 的修改(2)用户登陆后,能修改注册信息以及查看在线用户,好友列表(3)能够与其他客户端及服务端进行各种信息转发第三章 系统详细设计说明各模块的功能,并列出 UML 类图,以及类的说明系统用例图第 3 页 共 32 页UML 类图(服
4、务端)(客户端)第 4 页 共 32 页类的说明参考如下:一、ServerGUI 类1、ServerGUI 类简介服务端的一个主窗口类,服务端的 main()方法在这个类里,是首先启动的,所有服务端的功能都在这个类里调用,可以通过这个类设置端口,启动聊天服务,停止服务,向所有用户或个别用户发送消息,还设置客户端最大连接数,查看用户信息,是否联机情况和用户聊天记录等2、变量说明数据类型 变量名 变量作用DataBaseManager DBM 操作数据库的类JButton exitButton 退出按钮JMenuItem exitMenuItem 退出菜单int height 窗口的高JMenu
5、helpMenu 帮助菜单JMenuItem helpMenuItem 帮助子菜单JTextField inputField 聊天信息输入框JLabel label_1 为了排版的标签JLabel label_2 为了排版的标签JLabel label_3 为了排版的标签JLabel label_4 为了排版的标签ServerListen listenThread 服务端的侦听类JTextArea messageArea 显示全部聊天信息JScrollPane messageScrollPane 滚动条JPanel panel 放置组件JPanel panel2 放置组件JPanel pane
6、l3 放置组件JButton portButton 端口设置JMenuItem portMenuItem 端口设置JMenuItem selectUserListMenuItem 查看用户列表JButton sendButton 发送按钮JLabel sendMsgLab 显示发送消息标签JLabel sendToLab 显示发送至标签第 5 页 共 32 页JMenu serverMenu 服务菜单ServerSocket serverSocket 此类实现服务器套接字JMenuItem setChatNumMenuItem 设置(限制) 聊天人数JButton startButton 启动
7、服务JMenuItem startMenuItem 启动服务int startX 窗口左上角的 X 坐标int startY 窗口左上角的 Y 坐标JToolBar statusBar 创建状态栏JTextField statusBarLab 显示状态栏信息JButton stopButton 停止服务JMenuItem stopMenuItem 停止服务JMenu systemMagMenu 系统管理菜单JToolBar toolBar 创建工具栏JComboBox userComboBox 用户列表下拉框UserLinkList userLinkList 用户链表String userNa
8、me 用户名int width 窗口的宽3、构造方法说明方法名及参数 构造方法作用public ServerGUI() 初始化服务端窗口4、方法说明返回值类型 方法名及参数 方法作用public void actionPerformed(ActionEvent e) 监听事件的实现方法public void sendMsgToAll(String msg) 向所有人发送消息public void sendStopToAll() 向所有人发送服务器关闭的消息public void sendSystemMessage() 向客户端用户发送消息public void setLoc(Container
9、 JF) 设置窗口的位置public void startService() 启动服务端public void stopService() 关闭服务端方法详细说明(1) actionPerformed 方法public void actionPerformed(ActionEvent e)Parameters:动作事件 ActionEvent e方法体 :首先判断传进来的参数,再根据参数类型执行相应的处理动作事件(2) sendMsgToAll 方法public void sendMsgToAll(String msg)Parameters:聊天消息 String msg(3) sendSto
10、pToAll 方法第 6 页 共 32 页public void sendStopToAll()向所有人发送服务器关闭的消息(4) sendSystemMessage 方法public void sendSystemMessage() 向客户端用户发送消息(5) setLoc 方法public void setLoc(Container JF)Parameters:容器 Container JF设置窗口的位置(6) startService 方法public void startService()启动服务端(7) stopService 方法public void stopService()关
11、闭服务端二、UserList 类1、UserList 类简介可能通过该类查看所有用户的信息,可以删除用户,可以看到用户聊天信息。 2、变量说明数据类型 变量名 变量作用JButton buttonCancer 退出JButton buttonDelete 删除Container container 容器DataBaseManager dbm 操作数据库的类GridBagLayout gridBagL 布局类JScrollPane messageScrollPane 滚动条JPanel panelButton 放置按钮JPanel panelContainer 放置组件ResultSet rst
12、 得到从数据库返回的数据JTextArea showMessage 显示聊天记录String str 写 SQL 语句JTable table Table 组件,显示用户记录3、构造方法说明方法名及参数 构造方法作用public UserList(JFrame frame) 初始化用户列表窗口4、方法说明返回值类型 方法名及参数 方法作用public void actionPerformed(ActionEvent e) 监听事件的实现方法private void addContainer(JPanel panel,JComponent component,GridBagConstraints
13、 gbc,int gridx, int gridy, int gridwidth,int gridheight)该方法为了把组件加到一个容器里,按照指定的布局坐标第 7 页 共 32 页方法详细说明(1) actionPerformed 方法public void actionPerformed(ActionEvent e)Parameters:动作事件 ActionEvent e方法体 :首先判断传进来的参数,再根据参数类型执行相应的处理动作事件(2) addContainer 方法public void addContainer(JPanel panel,JComponent compon
14、ent,GridBagConstraints gbc,int gridx, int gridy, int gridwidth,int gridheight)Parameters:容器 JPanel panel,组件 JComponent component,布局容器 GridBagConstraints gbc,X 坐标 int gridx,Y 坐标 int gridy, 宽度 int gridwidth,高度 int gridheight该方法为了把组件加到一个容器里,按照指定的布局坐标三、UserLinkList 类1、UserLinkList 类简介用户链表类,可以通过该类增加,删除用户
15、,返回用户数,根据索引查找用户等2、变量说明数据类型 变量名 变量作用int count 存用户数Node pointer 用户链表的结点类对象Node root 用户链表的结点类对象3、构造方法说明方法名及参数 构造方法作用public UserLinkList() 构造用户链表4、方法说明返回值类型 方法名及参数 方法作用public void addUser(Node n) 添加用户public void delUser(Node n) 删除用户public Node findUser(int index) 根据索引查找用户public Node findUser(String user
16、name) 根据用户名查找用户public int getCount() 返回用户数方法详细说明(1) addUser 方法public void addUser(Node n)Parameters:用户链表的结点类 Node n添加用户(2) delUser 方法public void delUser(Node n)Parameters:用户链表的结点类 Node n删除用户第 8 页 共 32 页(3) findUser 方法public Node findUser(int index)Parameters:索引 int indexReturns: 用户链表的结点类(4) findUser 方法public Node findUser(String username)Parameters:用户名 String usernameReturns: 用户链表的结点类(5) getCount 方法public int getCount()Returns: 返回用户数四、ServerReceive 类1、Se