教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 说明书 >

聊天室的实现与设计(5)

来源:网络收集 时间:2025-09-14
导读: 兰州交通大学博文学院毕业设计(论文) 表4-4 系统信息表 字段名 id content senddate 数据类型 number varchar Date 长度 10 100 是否主键 是 否 否 描述 系统信息编号 信息内容 发送时间 5、 cc_user_message(用

兰州交通大学博文学院毕业设计(论文)

表4-4 系统信息表

字段名 id content senddate 数据类型 number varchar Date 长度 10 100 是否主键 是 否 否 描述 系统信息编号 信息内容 发送时间 5、 cc_user_message(用户聊天记录表):此表用来保存用户的聊天记录,方便用户需要时查询。

表 4-5 用户聊天记录表

字段名 id sendid senddate content sendToWho 数据类型 number number Date varchar varchar 长度 10 10 100 20 是否主键 是 否 否 否 否 描述 聊天记录编号 发送人编号 发送时间 发送内容 接受人姓名 4.3 聊天室服务器端设计

服务器端是整个聊天室的主要部分,它包含了客户端接入以及处理其发出请求的一系列方法,是整个聊天室的核心,客户发送的信息也是通过服务器发送到其他用户的。 4.3.1 服务器设计思想

作为服务器设计,需要考虑以下几点问题: (1)安全性

服务器的安全性包括两部分,一是服务器本身软硬件配置上的安全性,比如防止系统漏洞;二是服务器和客户端通讯协议的安全性设计,防止通过协议本身导致服务器被非法攻击等。

(2)并发服务能力

主要是线程间的锁控制。涉及到锁控制的,主要是因为共享问题。共享分为两种:一是代码共享部分;一是数据共享部分。其中做主要的还是数据共享部分。但是没有什么好的解决办法,唯一的办法就是检查这个共享是不是真正必要的,这些数据可不可以分成两部分以形成不是共享的。

(3)性能的可线性提高

16

兰州交通大学博文学院毕业设计(论文)

这主要指服务器的服务能力可以通过增加线程的方式线性提高性能。这就要求服务器的服务能力分担是均衡的,即实现良好的负载平衡。 4.3.2 服务器端界面

图 5-2 服务器界面

4.3.3 服务器端各主要类的定义及其功能

1、ChatServer::这个类是服务器端程序运行的入口,运用Swing图形界面定义了服务器的主界面,其中包含一个主窗体、若干个容器、按钮、输入框和文本显式框。jbInit()方法是使整个图形界面初始化。同时还有startServer()和stopServer()两个方法,当运行startServer()这个方法时就会创建个ServerSocket对象并设定8000端口号。运行stopServer()方法会关闭ServerSocket断开连接,请离用户的KickOut发法也定义在这个方法中。

2、Node:此类为用户节点类,其对象实例用户唯一标识一个用户,只有属性没有方法,并创建了一个自身的引用。

3、ServerListenThread:这个类继承了Thread线程类,主要的方法也是重写父类的main()方法。方法中定义了个while循环让ServerSocket一直处于监听状态,直到boolnean类型的isstop为false时,也就是服务器关闭是退出。并控制输入输出流来显

17

兰州交通大学博文学院毕业设计(论文)

式上线下线的信息发送到每个客户端。

4、UserInfoList:这个类是针对Node类也就是定义的用户进行操作,其中有增加用户的add()方法、删除用户的del()方法、指定id或name的两个Find()方法以及获所有用户数的getCount()方法。

5、SendMessageToAll:这个类用于向所有客户端发送信息,实现方法是sendMsgToAll,它有两个参数,一个是用户UserInfoList,和要发送的消息M。通过输入输出流来控制并通过网络传输的。

6、ServerReceiveThread:它继承了Thread线程类,用于获取客户端发来的信息并作适当的处理,在向客户端发送消息之前对要发的消息进行适当的加工。如客户端发出悄悄话请求时,这个类会调用方法在所发送的消息前加上“悄悄对你说”。 4.3.4 服务器端用户管理功能的设计

由于客户端承载着与客户端之间和客户端相互之间交流的重要任务,所有对所有用户端进行管理功能的实现很重要。在这个功能中是通过定义Node和UserInfoList这两个类来实现的当服务器端接到一个客户端的请求时,服务器端就会初始化一个Node节点作为客户端,Node类中出了有起必须的一些用户名、输入输出流等属性外,还定义了其自身的引用Node next,作用是把客户端设计成一个链表,通过next这个属性让他们连接起来,这样做的优点是不需要再定义List或者Map来存放客户端结点,只需在Node中增加一个属性就能实现,使其性能有很大的提高。UserInfoList中定义了对Node进行增加、删除、查找和返回其数目的方法,通过Node的next属性遍历所有的客户端。在整个的聊天室实现中客户端管理模块起到了基础的支持,无论是发送消息、上线下线和悄悄话都是调用UserInfoList中的方法来确定对哪个客户端进行操作的。Node对象是存放在内存中的,当ServerSocket关闭的时候会释放资源,Node结点失效。 4.3.5 服务器端显示消息的功能设计

服务器端作为所有消息的中转站和系统消息发出站,对消下的处理也是相当重要的一个环节,如果失去了消息发送消息的功能,聊天室也就是去了存在的意义。

首先在客户Node类中定义了两个属性,分别是ObjectOutputStream和ObjectInputStream,这是java语言的输入输出流,应用于所有信息的传递,可以输入输出对象、数据、字符串等等。首先ServerListenerThread会捕获到客户端的请求,然后引用Node类并调用OutputStream方法发送消息。Server ReceiveThread会接收到请求并判断是何种类型,是群聊还是悄悄话,是什么样的表情,服务器会对其进行加工,加

18

兰州交通大学博文学院毕业设计(论文)

上所需要的提示信息和用户名,如果是群聊,则调用SendMessage中的SendMsgToAll发送到每一个客户端。期间会调用UserInfoList来获取所有用户。客户端获得消息后调用服务器中定义的Node类中的OutputStream将接收并显示到图形界面中的文本输出框,群聊功能就实现了。如果是私聊,UserInfoList会根据用户名查找是哪个用户,再调用SendMessage方法将消息发送到指定客户端。如果是服务器端发送消息则会在发送之前加入“[系统消息]”后再调用SendMessageToAll方法发送到每个客户端。客户端程序通过输入流获取到信息后进行判断并作相应的处理。在字符串前面加上适当的说明信息之后条用textarea.append()方法将信息输出到主界面上。 4.3.6 服务器保存系统消息日志功能的实现

此功能主要把服务器端发送的系统消息保存进数据库,在Model层bean包中定义好系统消息类Information,并且封装成具体对象。对象与数据库之间的映射采用Hibernate框架。在服务器端界面,当管理员发送系统消息时,调用服务层中的ServerServiceimp类,通过这个类中的saveInformation方法调用模型层中的ServerDAOOper接口。此接口的实现类里面有具体的保存系统消息的方法。在此方法中采用Hibernate来与底层数据库进行交互。通过这样层层调用,来实现系统消息日志功能的保存。

4.4 聊天室客户端设计

客户端中定义了客户的主界面以及发送消息、接收消息等方法。它继承了Thread线程类,因而多个客户端可以并发执行且不受影响。 4.4.1 客户端设计思想

服务器的作用就是为了满足客户端的要求。客户端作为大众群体,地位也是非常重要,其权限没有服务器高。在客户端的设计中应当加入客户端住界面和接收发送信息的线程以及一些对基本字符串的处理,由于本系统时满足局域网内交流的实现,并且服务器要求并不固定,达到任何一台终端都可以作为一台服务器使用的要求,客户端的功能要求复杂了一 …… 此处隐藏:3154字,全部文档内容请下载后查看。喜欢就下载吧 ……

聊天室的实现与设计(5).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/449201.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)