短学期小项目-java网络聊天室
中级课程设计-基于网络的java聊天室
课程设计主要内容
课程设计主要内容:
1. 设计聊天程序客户端
2. 设计聊天程序服务端
3. 客户端满足登录注册界面显示,聊天页面显示,消息发送,在线人数显示
4. 服务端满足并发服务,数据库链接,消息转发
5. 项目整体架构满足分层结构,消息类型进行统一管理,模块化处理
6. 利用redis数据库进行用户信息存储
7. 利用json类型进行网络通信
8. 客户端满足公私聊界面分离
服务端总体逻辑设计

服务端总体流程为接收用户的Socket请求,建立网络通信通道.之后开启服务线
程为客户进行一对一服务.在服务过程中,服务线程接收客户端传入的Json类型信息
,并调用消息类型类对其进行解析,根据消息类型标识码,将其传入登录注册处理器或
者聊天处理器.处理器对信息进行解析处理后,并且根据信息类型和处理结果,将其转
发给目标用户,或者返还给请求客户端.同时返回一个bool类型给服务线程进行记录.
客户端总体逻辑设计

客户端首先进行初始化,初始化完成后,开启界面,首先是登录和注册界面,登
录消息通过总体消息处理器发送到服务端,服务端进行判定后,再返还消息给总体消
息处理器.总体消息处理器进行识别后,进行不同的操作,弹出错误,或者登录成功,进
入聊天界面.在聊天界面,客户端会启动一个信息接收线程开始接收信息内容,接收到
的聊天信息会显示在对应的界面上面.同时用户输入的信息还是会进入到总体消息处
理器进行处理发送.
服务端客户端连接部分

对于整体多人聊天软件项目而言,客户端接入服务端后,开启一个线程对客户端
进行一对一服务,这时,所有客户端的消息由服务线程进行处理,消息转发也是由服务
线程进行转发.这时候接收消息的客户端的消息获取线程就可以得到消息,并且传入
到消息处理器中,进行识别处理.
客户端设计
本项目客户端设计创建使用四个包,分别为CcMsgType,CcRun,CcView,Processor四个包,导入gson-2.6.2.jar包.项目文件如下管理:
CcClient/
|-- src/
| |-- CcMsgType/
| | |-- Msg.java
| |-- CcRun/
| | |-- ClientMain.java
| | |-- InitClient.java|
| |-- CcView/
| | |-- ClientView.java
| | |-- GetInfo.java
| |-- Processor/
| | |-- CcProcessor.java
| |
对于客户端,CcRun包下的 ClientMain.java包是程序入口,内部包含了程序的
main函数.在main函数内,实例化了InitClient.java函数来初始化客户端.在Init
Client.java函数内部,我在构造函数内部封装了获得输入输出流函数,在获得输入
输出流后,该函数实例化用户界面函数,ClientView.java.在Clie
ntView.java内部,我将各个界面封装为了一个个的函数,首先调用的是登录界面.再
登录界面内部,我实例化了CcProcessor.java类来对登录信息进行处理.C
cProcessor.java调用Msg.java来对消息类型进行封装.之后发给服务端.
在登录成功后,程序首先实例化并运行一个GetInfo.java对象来循环获得聊天消息
.对于用户列表,程序后台接收信息后,通过一个在ClientView.java内的全局静态的
Jlist类型进行更新.显示在用户的界面上.同时,会根据消息列表来对应实例化Jtex
tArea类型的静态全局变量,存放在ClientView.java的一个HashMap中.之后,G
etInfo.java的实例接收到的消息,根据群聊或者私聊,显示在对应的聊天窗口上面.
当我们点击关闭按钮,或者点击窗口右上角的关闭时,窗口关闭,同时,结束各个线程,程序退出.
服务端设计
本项目服务端设计创建使用三个包,分别为CcMsgType,CcRun,CcProcessor三个包,导入gson-2.6.2.jar包,jedis-2.9.0.jar项包项目文件如下管理:
CcServer/
|-- src/
| |-- CcMsgType/
| | |-- Msg.java
| |-- CcRun/
| | |-- ServerMain.java
| | |-- ClientsAndPrints.java
| | |-- InitSever.java
| | |-- SwitchServer.java
| |-- CcProcessor/
| | |-- ChatProcessor.java
| | |-- UserProcessor.java|
| |
对于服务端,CcRun包下的 ServerMain.java包是程序入口,内部包含了程序的main
函数.在main函数内,实例化了InitServer.java对象来初始化客户端.在Init
Server.java内部,我在构造函数内部创建了线程池并进行了启动.在Init
Server.java的Start()方法内部,每当我们接收到了Socket对象,我们就实例化一
个SwitchServer.java来进行单独的服务,并传入线程池.
在SwitchServer.java内部,我们根据接受的对象,首先开始创建对应的输入输出流
,同时实例化出ChatProcessor.java和UserPorcessor.java来对获得的信息进行
不同的处理.之后,该SwitchServer.java线程就开始循环的接收客户端发送的信息
,每当我们接收到登录信息,我们就将其传入UserProcessor.java内部的登录方法
进行验证,在UserProcessor.java内部,我们调用数据库来对数据进行验证,并且返
回给客户端.同时,我们如果登录成功,我们会将用户的id和输出流写入一个Clie
ntsAndPrints.java内部的一个静态HashMap中,同时返还一bool值给 Swit
chServer.java.SwitchServer.java之后会将全部的在线用户转发给全部的在Ha
shMap中存储的用户.
之后的注册信息也类似于上述原理.对于群聊和群发消息,转发给Chat
Processor.java的实例对象处理,该处理器根据消息类型,对消息进行转发.对于退
出消息,也会传入ChatProcessor.java内部.之后该处理器调用Clie
ntsAndPrints的静态公共HashMap进行删除用户,之后将新的在线用户转发给全部
的客户端.
内容展示





总结和问题
没怎么用过java 边学边写,终于是写完了,但是有一些小问题,服务器启动前必须要先启动redis数据库. 对于消息,没有提醒音还有闪烁之类的东西,并且使用了大量的全局静态变量.很不好,但是没办法,写不出来了.

浙公网安备 33010602011771号