# JChat局域网聊天项目
项目使用javafx作为ui开发平台,基于udp和tcp实现聊天功能。
支持同一网络环境内多设备聊天(测试了多台windows、mac设备通过有线和无线连接到一个局域网的情况)。
通信的流程可以简单描述为:
1. 每个用户登录时会生成一个带uuid的用户信息
2. 使用udp向局域网多播自己的信息(只通过某一网卡,这个网卡必须连接到其它用户所在的网络)
3. 监听多播组中其它在线用户的信息
4. 连接其它在线用户并创建聊天会话
5. 发送和接收聊天消息
6. 如果聊天消息中有图片或者文件则创建文件会话下载对应的文件
**[视频演示 screen-record.mp4](./screen-record.mp4)**
屏幕截图
![登录](./screenshots/1.png)
![聊天1](./screenshots/2.png)
![聊天2](./screenshots/3.png)
## 聊天组件简介
位于chat包下。
### ChatManager
管理所有聊天组件的类,实现:ChatManagerImpl
### ChatClient
1. 负责连接在线用户并创建ChatSession
2. 为每个ChatSession创建发送和接收线程
3. 把用户要发送的消息放到发送消息队列,发送线程会循环查询这个队列并把新的消息发送出去
4. 接收线程循环接收对方用户发来的消息,把新消息存到ChatMessageStore并通知对应的subscriber
### ChatMessageStore
简单的 in-memory 聊天消息存储
### ChatServer
1. 建立一个tcp监听ServerSocket
2. 循环接受新的tcp连接
3. tcp连接之后是应用会话建立过程,有ChatSession和FileSession,分别对应聊天消息会话和文件服务会话
4. 会话建立完成后,告知ChatManager
### FileManager
1. 根据用户id创建FileSession,FileSession是用于请求和响应文件资源,类似HTTP,一个请求对应一个响应
2. 根据用户需求创建文件下载任务请求下载对应的文件(包括聊天图片原图)
3. 监听FileSession(作为服务端)请求,并发送对应的文件资源,发送时先告知对方文件大小,然后再发送字节信息
4. 下载和发送文件进度更新时通知subscriber
### OnlineUserManager
1. 多播自己的信息
2. 监听多播,接收其它用户的信息
3. 在线用户列表更改时通知ChatManager
### SessionManager
1. 定时检查session,对超时的session进行关闭清理
2. 对意外关闭的session进行关闭清理
3. session移除时通知ChatManager
## 注意事项
1. 网络接口需要和其它用户连接在同一网络,比如连接到同一路由器, 当前的逻辑是遍历所有网络接口列表,排除本地环路和虚拟接口,找到第一个没有被排除的接口。
如果无法通信可以对OnlineUserManager类的`getDesiredInterface`方法进行调试和问题排查
2. 第一次运行项目或者更改配置后可能无法正常运行,有可能是jdk和javafx库冲突,我试过把pom.xml的java版本乱改,再刷新maven,然后再把java版本改回来就可以正常。
有时候点击javafx相关类的源码时会定位到旧版java9的代码,也是通过类似的办法解决。
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
本人十余年JAVA从业经验,精通JAVA高可用、分布式、高并发系统架构设计。有志于做JAVA职业规划、技术提升的可与我联系,交个朋友~ 本人十余年JAVA从业经验,精通JAVA高可用、分布式、高并发系统架构设计。有志于做JAVA职业规划、技术提升的可与我联系,交个朋友~ 本人十余年JAVA从业经验,精通JAVA高可用、分布式、高并发系统架构设计。有志于做JAVA职业规划、技术提升的可与我联系,交个朋友~
资源推荐
资源详情
资源评论
收起资源包目录
《JAVA课程设计》--使用javafx实现的基于udp、tcp的聊天GUI应用,可用作Java大作业、计网课程设计.zip (125个子文件)
item_chat.css 783B
home.css 760B
chat.css 754B
item_online_user.css 302B
item_chat_session.css 278B
login.css 114B
home.fxml 3KB
chat.fxml 2KB
item_chat_session.fxml 1KB
item_chat_file_right.fxml 1KB
item_chat_file_left.fxml 1KB
login.fxml 1KB
item_online_user.fxml 900B
item_chat_image_right.fxml 858B
item_chat_image_left.fxml 829B
item_chat_text_right.fxml 796B
item_chat_text_left.fxml 766B
.gitignore 176B
.gitignore 34B
JChat.iml 4KB
FileManager.java 16KB
HomeController.java 16KB
OnlineUserManager.java 11KB
ChatClient.java 11KB
ChatMessage.java 9KB
ChatController.java 7KB
ItemChatMessageController.java 7KB
ResizeHelper.java 6KB
ChatTest.java 6KB
SessionManager.java 5KB
ChatServer.java 5KB
ChatManagerImpl.java 5KB
ChatImageView.java 4KB
FileTask.java 4KB
Session.java 3KB
Utils.java 2KB
OnlineUserManagerTest.java 2KB
ImageUtils.java 2KB
LoginController.java 2KB
CircleImageView.java 2KB
OnlineUser.java 2KB
ItemChatSessionController.java 2KB
User.java 1KB
TestChatManager.java 1KB
ChatMessageStore.java 1KB
ChatSession.java 1KB
ItemOnlineUserController.java 1KB
ObjectHelper.java 940B
ChatSessionInfo.java 933B
HomePage.java 920B
LoginPage.java 847B
ChatManager.java 765B
FileSession.java 671B
ChatListener.java 347B
module-info.java 318B
UIUtils.java 272B
MessageSubscriber.java 248B
Constants.java 164B
FileTaskSubscriber.java 147B
ItemController.java 126B
Main.java 126B
README.md 3KB
screen-record.mp4 5.76MB
6.png 516KB
3.png 345KB
5.png 322KB
2.png 259KB
4.png 234KB
1.png 223KB
2.png 92KB
3.png 88KB
1.png 20KB
chat_empty.png 6KB
placeholder.png 6KB
ic_pdf.png 3KB
ic_doc.png 3KB
ic_xls.png 3KB
ic_ppt.png 3KB
ic_audio.png 3KB
ic_other.png 2KB
ic_video.png 2KB
ic_zip.png 2KB
ic_txt.png 2KB
file-open.png 969B
maximize-2.png 890B
maximize.png 721B
close.png 693B
close_fill.png 622B
minimizing.png 306B
uiDesigner.xml 9KB
pom.xml 5KB
dependency-reduced-pom.xml 3KB
jarRepositories.xml 1KB
log4j2.xml 726B
JChat.xml 696B
Maven__org_jetbrains_kotlin_kotlin_stdlib_common_1_6_20.xml 622B
Maven__org_junit_platform_junit_platform_commons_1_7_1.xml 621B
compiler.xml 621B
Maven__org_junit_platform_junit_platform_engine_1_7_1.xml 614B
Maven__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_6_20.xml 608B
共 125 条
- 1
- 2
资源评论
季风泯灭的季节
- 粉丝: 639
- 资源: 2920
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功