You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

11 KiB

TCP 局域网点对点聊天系统

基于 Java Socket 编程实现的 TCP 点对点聊天系统,支持在 openEuler 和 Windows 系统上运行。

🌐 在线访问地址:http://120.46.87.202:8080

功能特性

  • 基于 TCP 协议的可靠连接
  • 支持多用户同时在线
  • 点对点私聊功能
  • 实时在线用户列表
  • 心跳保活机制
  • 优雅的连接管理
  • Web图形界面客户端(美观易用)
  • WebSocket实时通信
  • 响应式设计(支持移动端)
  • 云服务器部署(公网访问)
  • 文件传输(支持任意文件类型)
  • 图片传输与显示(自动预览)
  • 视频传输与播放(内置播放器)
  • 音频传输与播放(支持多种格式)
  • 语音聊天(实时录制和播放)

项目结构

src/
├── common/                    # 公共类
│   ├── Message.java           # 消息实体类
│   └── MessageType.java       # 消息类型枚举
├── server/                    # 服务器端
│   ├── ChatServer.java        # TCP聊天服务器
│   ├── ClientHandler.java     # TCP客户端处理器
│   ├── WebSocketServer.java   # WebSocket服务器Web客户端
│   └── WebSocketClient.java   # WebSocket客户端处理器
└── client/                    # 客户端
    └── ChatClient.java        # 命令行聊天客户端
lib/
└── gson-2.10.1.jar           # JSON处理库

技术实现

核心技术

  • Socket 编程: 使用 Java Socket API 实现 TCP 通信
  • 多线程: 使用线程池处理多客户端并发连接
  • 对象序列化: 使用 ObjectInputStream/ObjectOutputStream 传输消息对象
  • 并发控制: 使用 ConcurrentHashMap 管理在线用户

通信协议

  • LOGIN: 用户登录
  • LOGOUT: 用户登出
  • PRIVATE_MSG: 私聊消息
  • USER_LIST: 在线用户列表
  • FILE: 普通文件传输
  • IMAGE: 图片文件传输
  • VIDEO: 视频文件传输
  • AUDIO: 音频文件传输
  • VOICE: 语音消息
  • HEARTBEAT: 心跳包
  • ACK: 确认消息

快速开始

🚀 一键启动(最简单)

Linux/openEuler:

chmod +x quick_start.sh
./quick_start.sh

Windows:

quick_start.bat

然后在浏览器打开 http://localhost:8080 即可使用!

📋 完整启动菜单

如果需要选择启动模式Web服务器、TCP服务器、客户端等

Linux/openEuler:

chmod +x start_all.sh
./start_all.sh

Windows:

start_all.bat

🛑 停止所有服务

Linux/openEuler:

chmod +x stop_all.sh
./stop_all.sh

Windows:

stop_all.bat

方式一Web图形界面客户端推荐

1. 下载依赖库

Linux/openEuler:

chmod +x download_gson.sh
./download_gson.sh

Windows:

download_gson.bat

2. 编译Web版本

Linux/openEuler:

chmod +x compile_web.sh
./compile_web.sh

Windows:

compile_web.bat

3. 启动WebSocket服务器

Linux/openEuler:

chmod +x run_web_server.sh
./run_web_server.sh

Windows:

run_web_server.bat

服务器默认监听端口: 8080

4. 打开浏览器访问

在浏览器中打开:http://localhost:8080

多个用户可以同时打开多个浏览器标签页或不同浏览器进行聊天。

方式二:命令行客户端

1. 编译项目

Linux/openEuler:

chmod +x compile.sh
./compile.sh

Windows:

compile.bat

2. 启动服务器

Linux/openEuler:

chmod +x run_server.sh
./run_server.sh

Windows:

run_server.bat

服务器默认监听端口: 8888

3. 启动客户端

Linux/openEuler:

chmod +x run_client.sh
./run_client.sh

Windows:

run_client.bat

4. 使用说明

Web客户端使用

  1. 在浏览器中打开 http://localhost:8080
  2. 输入用户名登录
  3. 在左侧用户列表中选择要聊天的用户
  4. 在底部输入框输入消息,点击发送或按回车键
  5. 支持多个浏览器标签页同时登录不同用户

命令行客户端使用

启动客户端后,按提示输入:

  1. 服务器地址(默认 localhost
  2. 服务器端口(默认 8888
  3. 用户名

聊天命令:

  • @用户名 消息内容 - 发送私聊消息
  • quit - 退出程序

示例:

@张三 你好,在吗?
@李四 收到,马上处理
quit

使用场景

场景1在线Web聊天最简单

无需安装任何软件,直接使用!

  1. 用户A在浏览器打开 http://120.46.87.202:8080,输入用户名 Alice
  2. 用户B在浏览器打开 http://120.46.87.202:8080,输入用户名 Bob
  3. Alice 在左侧选择 Bob输入消息发送
  4. Bob 在左侧选择 Alice输入消息回复
  5. 支持多个用户同时在线,界面美观易用

特点:

  • 无需下载安装
  • 支持手机、平板、电脑
  • 跨平台使用
  • 实时通信

场景2局域网Web聊天

  1. 在服务器机器上启动WebSocket服务器假设IP: 192.168.1.100
  2. 用户A在浏览器打开 http://192.168.1.100:8080,输入用户名 Alice
  3. 用户B在浏览器打开 http://192.168.1.100:8080,输入用户名 Bob
  4. Alice 在左侧选择 Bob输入消息发送
  5. Bob 在左侧选择 Alice输入消息回复
  6. 支持多个用户同时在线,界面美观易用

场景3: 局域网内命令行聊天

  1. 在服务器机器上启动TCP服务器假设IP: 192.168.1.100
  2. 在客户端A上启动客户端输入服务器地址 192.168.1.100,用户名 Alice
  3. 在客户端B上启动客户端输入服务器地址 192.168.1.100,用户名 Bob
  4. Alice 输入 @Bob 你好 发送消息给 Bob
  5. Bob 输入 @Alice 你好 回复消息给 Alice

场景3: openEuler 云服务器部署

  1. 在 openEuler 服务器上编译并启动WebSocket服务器
  2. 确保防火墙开放 8080 端口Web版或 8888 端口(命令行版)
  3. 客户端使用服务器公网IP连接
  4. Web客户端直接在浏览器访问无需安装任何软件

系统要求

  • JDK 8 或更高版本
  • Linux (openEuler 推荐) 或 Windows 操作系统
  • 局域网或互联网连接

防火墙配置

openEuler/CentOS:

# Web版本 - 开放8080端口
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload

# 命令行版本 - 开放8888端口
sudo firewall-cmd --zone=public --add-port=8888/tcp --permanent
sudo firewall-cmd --reload

Ubuntu:

# Web版本
sudo ufw allow 8080/tcp

# 命令行版本
sudo ufw allow 8888/tcp

扩展功能(可选)

系统架构支持以下扩展:

  • 文件传输(已预留 FILE 消息类型)
  • 图片传输与显示
  • 音视频文件传输
  • 语音聊天

开发说明

添加新功能

  1. MessageType.java 中添加新的消息类型
  2. Message.java 中添加必要的字段
  3. ClientHandler.java 中处理新消息类型
  4. ChatClient.java 中实现客户端逻辑

调试技巧

  • 服务器端会打印所有连接和消息日志
  • 客户端会显示接收到的所有消息
  • 使用 netstat -an | grep 8888 查看端口状态

Web界面特性

  • 🎨 现代化渐变背景设计
  • 💬 实时消息推送
  • 👥 在线用户列表实时更新
  • 📱 响应式布局,支持移动端
  • ⌨️ 支持回车键快速发送
  • 🎯 消息气泡样式,左右区分
  • 消息时间戳显示
  • 🔔 用户上下线提醒
  • 平滑动画效果
  • 📎 文件传输(支持拖拽上传)
  • 🖼️ 图片预览(点击放大查看)
  • 🎬 视频播放(内置播放器)
  • 🎵 音频播放(支持多种格式)
  • 🎤 语音消息(一键录制)

多媒体功能使用

Web客户端

发送文件

  1. 点击输入框左侧的 📎 按钮
  2. 选择要发送的文件(图片、视频、音频或其他文件)
  3. 文件会自动发送给当前聊天对象
  4. 文件大小限制5MB(建议压缩大文件)

发送语音消息

  1. 点击输入框右侧的 🎤 按钮开始录音
  2. 按钮变为 ⏹️ 表示正在录音
  3. 再次点击停止录音并发送
  4. 注意:需要授予浏览器麦克风权限

查看多媒体内容

  • 图片:自动显示在聊天界面,点击可放大查看
  • 视频:显示视频播放器,点击播放按钮观看
  • 音频:显示音频播放器,点击播放按钮收听
  • 语音:显示语音播放控件和时长
  • 普通文件:显示文件信息,点击"下载"按钮保存

TCP客户端命令行

发送文件

/file @用户名 文件路径

示例:

# 发送图片
/file @Alice photo.jpg

# 发送视频
/file @Bob video.mp4

# 发送文档
/file @Charlie document.pdf

接收文件

  • 文件自动保存到 downloads 目录
  • 文件名格式:用户名_原文件名
  • 控制台显示文件信息和保存路径

支持的文件格式

类型 格式 大小限制 说明
图片 JPG, PNG, GIF, BMP, WebP 2MB 自动预览,建议压缩
视频 MP4, WebM, AVI, MOV 2MB 内置播放器,建议使用短视频
音频 MP3, WAV, OGG, M4A 2MB 内置播放器
语音 WebM, OGG 2MB 录制格式
其他 任意格式 2MB 下载保存

注意: Web 客户端文件大小限制为 2MB超过此大小请使用 TCP 命令行客户端(支持更大文件)。

麦克风权限设置

如果无法使用语音功能,请参考:麦克风权限设置指南

快速解决:

  1. 点击浏览器地址栏左侧的锁图标 🔒
  2. 找到"麦克风"选项,选择"允许"
  3. 刷新页面F5

注意: 语音功能需要在安全上下文中使用HTTPS 或 localhost

常见问题

Q: Web客户端连接失败 A: 检查WebSocket服务器是否启动、浏览器是否支持WebSocket、防火墙是否开放8080端口

Q: 命令行客户端连接失败? A: 检查TCP服务器是否启动、IP地址是否正确、防火墙是否开放8888端口

Q: 消息发送失败? A: 确认接收者用户名正确且在线

Q: 发送图片后断开连接? A: 文件过大导致,建议:

  • 压缩图片后再发送
  • 文件大小不超过5MB
  • 使用TCP客户端发送大文件

Q: 无法使用语音功能? A: 检查:

  • 浏览器是否授予麦克风权限
  • 是否通过 HTTPS 或 localhost 访问
  • 浏览器是否支持Chrome 60+, Firefox 55+
  • 详见 麦克风权限设置指南

Q: 视频/音频无法播放? A: 确认:

  • 浏览器支持该格式
  • 文件未损坏
  • 推荐格式MP4 (视频), MP3 (音频)

Q: 如何修改端口? A: Web版修改 WebSocketServer.java 中的 PORT 常量默认8080 命令行版修改 ChatServer.java 中的 PORT 常量默认8888

Q: Gson库下载失败 A: 可以手动下载 gson-2.10.1.jar 并放置在 lib 目录下 下载地址: https://repo1.maven.org/maven2/com/google/code/gson/gson/2.10.1/gson-2.10.1.jar

相关文档

作者

网络编程实验项目

许可证

MIT License