# 简单聊天程序的设计与实现
## 一、实验内容和要求
应用层实验—简单聊天程序的设计与实现
本实验要求设计并实现一个简单的聊天程序,包括服务器实现和客户端实现,具体内容和要求如下:
使用 MSN 或者 QQ,分析聊天程序的功能需求;
在给定的参考程序的基础上,参考 MSN 或者 QQ,对功能做出扩充,不局限于以下的范围:
在客户端界面上显示所有联入聊天服务器的用户;
支持两个用户之间的聊天;
支持增加好友的功能,好友上线时如果该用户在线,则做出提醒;
增加用户的个人信息修改、保存和查询;
在聊天内容中支持中文;
在聊天内容中支持图片等多媒体信息;
支持在用户之间传输文件等附件;
其他扩展。
## 二、实验环境
处理器:11th Gen Intel(R) Core(TM) i5-11300H @ 3.10GHz 3.11 GHz
随机存取存储器:16.0 GB (15.7 GB usable)
操作系统:Windows 10 Pro Version:20H2
集成开发环境:Eclipse IDE for Enterprise Java Developers (includes Incubating components)
```
Version: 2020-12 (4.18.0)
```
网络适配器: Intel(R) Wi-Fi 6 AX201 160MHz
## 三、程序的需求分析与逻辑框图
### 1.需求分析
本实验要实现地是一个客户端服务器聊天程序,与我们所熟悉地 QQ,微信,Line 聊天程序类似,可以参照它们在基本地功能框架上来实现功能地扩展。
扩展功能:
1)我们在网络媒体上地交流主要是通过文字,声音,图片,文件等媒介实现地.所以要在原来地基础上增加中文,图片,文件的相互传送。
2)为了友好界面,我们应该设计用户连接,登录,聊天界面,更加实用,便于理解。
3)客户端与服务器是多对一地关系,一个服务器可以连接多个客户端。
4)每个用户单独设计用户名,密码验证以及注册功能。
5)服务器要与数据库进行连接,更新实时信息,及时地写入读取。
6)在用户信息显示栏显示好友上线信息,昵称信息。
7)参照 QQ 聊天工具,加入了小游戏功能,客户端可以进行小游戏,完成后将积分记录,可以查询所有用户的积分排行。
8)参照 QQ 客户端,可以进行截图操作,将图片保存到本地。
9)对于客户间的文件传输,如果是图片文件则直接打开显示。
10)增加文件传输进度栏,对于较大文件的传输更加直观和友好。
12)好友上线的声音提醒;接收到消息的声音提醒。
12)用户可以修改自己的个人信息和查看别人的个人信息。
13)群聊和私聊窗口相互独立、互不影响。
14)用户的头像显示。
15)非法消息发送的检测和提醒。
16)注册密码不一致、登录失败等异常的检测与提示。
### 2.逻辑框图
1)客户端与服务器信息交互逻辑框图
![](https://www.writebug.com/myres/static/uploads/2021/10/31/d97b6c9d3721f86a0a6f4c38151bff05.writebug)
2)客户端的登录,注册,信息更新
![](https://www.writebug.com/myres/static/uploads/2021/10/31/123b0bca135afa6b128fd13bd56ec65c.writebug)
## 四、程序核心功能的实现机制
1)客户端界面
登录,注册界面
首先根据初始的界面设计,进行布局设置,利用 BorderLayout,JPanel,JTextField,JButton 等控件摆出登录界面的布局,并在按钮,输入框中添加事件监听,键盘监听以及焦点事件监听 addActionListener()
![](https://www.writebug.com/myres/static/uploads/2021/10/31/4b7eecec9a3cdce2563d758fca0e8338.writebug)
好友信息显示界面
根据初始的界面设计,进行布局设置,利用 BorderLayout,JPanel,JScrollPane,JTextField,JButton 等控件摆出用户界面的布局,并在按钮,输入框中添加事件监听,键盘。
与上面的设置类似,之后又增加了好友信息的显示,用两个 Set 类型的 onlines、friedns 来存储用户以及好友的用户。来显示所有在线的用户以及好友用户信息。
事件监听:
![](https://www.writebug.com/myres/static/uploads/2021/10/31/da2bc3234e76be65b175d103dca11c33.writebug)
按钮监听:
![](https://www.writebug.com/myres/static/uploads/2021/10/31/28cbd36294e6f1ff5ed915e886cfb68d.writebug)
用户与用户之间聊天显示界面
同样根据初稿的界面设计,进行布局设置,利用 BorderLayout,JPanel,JScrollPane,JTextField,JButton 等控件摆出用户界面的布局,并在按钮,输入框中添加事件监听,键盘监听以及焦点事件监听 addActionListener()
调用一个新窗口来显示接收到的图片。
事件监听:主体为三个文字,图片,文件的监听
接受时监听不同类型的 bean,文件 bean 中会存储文件信息,文本 bean 中有存储文本,图片存储图片,依次提取出来按不同的方式进行显示。
![](https://www.writebug.com/myres/static/uploads/2021/10/31/2f00d332ca095cf4fdad5d515b06faa5.writebug)
发送的时候则是分别创建 beantype 为文件,文字与图片,进行发送,附带接收者的 ID,即可完成发送。
2)客户端监听 ClientInputThread 实现的主要功能:接收来自服务器的信息,并做出相应的回应。创建一个线程死循环来接收来自服务器的消息 ois = new ObjectInputStream(clientSocket.getInputStream());final CatBean bean =(CatBean) ois.readObject();转换成 Catbean 再通过获取 bean 中的 type 进行 switch 选择。
![](https://www.writebug.com/myres/static/uploads/2021/10/31/b83db905e9da79ddb13dbea33d136cae.writebug)
接受文件:
由于需要等待对方是否接受,所以需要新建一个线程用于阻塞,来等待对方接受,当对方接受之后通过新建一个 DataInputStream 对象来接受服务器发送来的文件,以及新建一个 DataOutputStream 对象来存储到本地文件上。
接受用户上下线:
将 **onlines** 清空,从服务器传来的 bean 中读出所有目前在线的客户,并添加进 **onlines** 当中。
接受好友上线:
同接受用户操作,并在消息框中显示目标好友上线。
接受文字:
读出服务器上传过来的 bean 的 info 信息,并根据对方的昵称将消息显示到消息框中。
3)服务器端 MainSever()
对于该聊天工具,整体实现机制时通过执行服务器中的 start 函数,建议 socket 接口并使之处于阻塞状态,当有客户端进行连接使,会给客户端返回一个专属的 socket 接口,为客户端建立一个新的 socket 线程,用于通信。这时会启动 Run 函数,不断地去读取客户端发来的数据,获取客户端的输入流,读取客户端发来的信息,进行类型的分析,用不同的 chatbean 进行处理。
4)数据库的设计
学生信息表(学号[账号],昵称,性别,年龄、学校、密码、游戏分数)
![](https://www.writebug.com/myres/static/uploads/2021/10/31/b0b0bcbbc574b4aac582b2f8fbdefd0e.writebug)
好友信息表(源学生 ID[账号],其好友 ID[账号])
![](https://www.writebug.com/myres/static/uploads/2021/10/31/35b743f94151d44ec7c7ca05008724f5.writebug)
打印数据库报告
![](https://www.writebug.com/myres/static/uploads/2021/10/31/a305ea02c5d17dfe8d5e90ce09d32f55.writebug)
## 五、程序源代码(核心部分)
1)服务器核心代码
服务器接收来自客户端信息并做相应处理
![](https://www.writebug.com/myres/static/uploads/2021/10/31/d134502ad901602b820f4a876c4957a3.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/10/31/7b4cc3da25f5f7c554e570534486e171.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/10/31/cefb6a5fdff88dc4f0ae5ecad0d8088e.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/10/31/1f47015f43d0f2bde4439c6b39ed47e8.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/10/31/b77ed38a8ba10c0dbfbca733835e9
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
应用层实验—简单聊天程序的设计与实现 本实验要求设计并实现一个简单的聊天程序,包括服务器实现和客户端实现,具体内容和要求如下: 使用 MSN 或者 QQ,分析聊天程序的功能需求; 在给定的参考程序的基础上,参考 MSN 或者 QQ,对功能做出扩充,不局限于以下的范围: 在客户端界面上显示所有联入聊天服务器的用户; 支持两个用户之间的聊天; 支持增加好友的功能,好友上线时如果该用户在线,则做出提醒; 增加用户的个人信息修改、保存和查询; 在聊天内容中支持中文; 在聊天内容中支持图片等多媒体信息; 支持在用户之间传输文件等附件; 其他扩展。
资源推荐
资源详情
资源评论
收起资源包目录
基于Java+MySQL设计与实现的(GUI)简单聊天程序【100013033】 (111个子文件)
ChatClient.class 14KB
FileDataSource.class 12KB
MainServer$CatClientThread.class 10KB
Dao.class 8KB
Snake.class 8KB
BroadcastCommandParser.class 7KB
Vollyball.class 7KB
ChatClient$ClientInputThread$2.class 6KB
ChatClient$ClientInputThread$1.class 6KB
ChatClient$ClientInputThread.class 5KB
ChatClient$8.class 4KB
ClientKernel.class 4KB
MainServer.class 4KB
ClientLogin.class 3KB
UpdateUser.class 3KB
ChatClient$ClientInputThread$3.class 3KB
CatBean.class 3KB
ConnectedClient.class 3KB
ChatClient$8$1.class 3KB
ChatClient$8$3.class 3KB
ChatClient$8$2.class 3KB
ServerMsgListener.class 3KB
ChatClient$6.class 3KB
Register.class 3KB
UserInfo.class 3KB
ServerMsgSender.class 3KB
CameraTest.class 2KB
ClientLogin$ClientInputThread.class 2KB
ConnectionKeeper.class 2KB
ChatClient$4.class 2KB
UpdateUser$RegisterAction.class 2KB
Student.class 2KB
Snake$2.class 2KB
Snake$1.class 2KB
Register$RegisterAction.class 2KB
ClientMsgSender.class 2KB
ClientMsgListener.class 2KB
Vollyball$Timer.class 2KB
ChatForm.class 2KB
Vollyball$3.class 2KB
ChatClient$7.class 2KB
Snake$Timer.class 2KB
ChatClient$2.class 2KB
DBConnection.class 2KB
ChatClient$ClientHistory.class 2KB
ChatForm$ClientHistory.class 2KB
CellRenderer.class 2KB
ChatClient$5.class 2KB
ClientLogin$2.class 2KB
T6Client.class 1KB
Vollyball$2.class 1KB
CatUtil.class 1KB
FileDataSource$User.class 1KB
FileDataSource$Info.class 1KB
Vollyball$Change.class 1KB
ChatClient$5$1.class 1KB
Vollyball$1.class 1KB
ChatClient$3.class 1KB
ChatClient$1.class 1KB
ClientLogin$3.class 1KB
ClientLogin$4.class 1KB
Vollyball$ATimer.class 1012B
ClientBean.class 979B
Vollyball$Music.class 934B
ClientLogin$1.class 801B
ChatClient$9.class 757B
UUListModel.class 664B
DataSource.class 436B
Tile.class 406B
CommandParser.class 274B
计算机网络课程设计实验报告 王熙贵 18010209.doc 6.1MB
javafx.graphics.jar 4.1MB
javafx.controls.jar 2.39MB
mysql-connector-java-8.0.23.jar 2.3MB
javafx.base.jar 732KB
javafx.web.jar 698KB
javafx.media.jar 264KB
javafx.fxml.jar 124KB
javafx.swing.jar 117KB
javafx-swt.jar 36KB
ChatClient.java 62KB
Snake.java 17KB
MainServer.java 16KB
FileDataSource.java 13KB
Vollyball.java 10KB
Dao.java 9KB
ClientLogin.java 7KB
BroadcastCommandParser.java 6KB
ConnectedClient.java 6KB
ClientKernel.java 5KB
UpdateUser.java 5KB
Register.java 4KB
ChatForm.java 3KB
UserInfo.java 3KB
CatBean.java 2KB
T6Client.java 2KB
CameraTest.java 2KB
ConnectionKeeper.java 1KB
Student.java 1KB
CatUtil.java 933B
共 111 条
- 1
- 2
资源评论
神仙别闹
- 粉丝: 3920
- 资源: 7473
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功