# P2P Chat - 点对点通信应用 一个基于 Python 的 P2P 网络通信应用程序,支持文本消息、文件传输、图片分享和语音通话。 ## 功能特性 - 文本消息通信 - 文件传输(支持断点续传) - 图片传输与显示 - 音视频播放 - 语音聊天 - 局域网自动发现 - 离线消息缓存 ## 环境要求 - Python 3.9+ - MySQL 5.7+(可选,用于持久化存储) ## 安装 ### 1. 克隆项目 ```bash git clone cd chatProgram ``` ### 2. 创建虚拟环境 ```bash python -m venv venv # Windows venv\Scripts\activate # Linux/Mac source venv/bin/activate ``` ### 3. 安装依赖 ```bash pip install -r requirements.txt ``` ### 4. 系统依赖(Linux) ```bash # Ubuntu/Debian sudo apt install portaudio19-dev ffmpeg libopus-dev # openEuler/CentOS sudo dnf install portaudio-devel ffmpeg opus-devel ``` ## 快速开始 ### 启动服务器 ```bash # 基本启动 python run_server.py # 指定地址和端口 python run_server.py --host 0.0.0.0 --port 8888 # 调试模式 python run_server.py --debug ``` ### 启动客户端(命令行) ```bash # 基本启动 python run_client.py --username alice # 连接远程服务器 python run_client.py -u bob -s 192.168.1.100 -p 8888 # 带显示名称 python run_client.py -u alice -d "Alice Wang" ``` ### 启动客户端(GUI) ```bash # 基本启动 python run_client_gui.py # 指定服务器 python run_client_gui.py --server 192.168.1.100 --port 8888 ``` ## 命令行客户端命令 连接成功后可使用以下命令: | 命令 | 说明 | |------|------| | `/list` | 查看在线用户 | | `/msg <用户> <消息>` | 发送消息 | | `/file <用户> <路径>` | 发送文件 | | `/call <用户>` | 发起语音通话 | | `/endcall` | 结束通话 | | `/stats` | 查看统计信息 | | `/refresh` | 刷新用户列表 | | `/help` | 查看帮助 | | `/quit` | 退出 | ## 配置 ### 环境变量 ```bash # 服务器配置 P2P_SERVER_HOST=0.0.0.0 P2P_SERVER_PORT=8888 P2P_MAX_CONNECTIONS=1000 # 数据库配置 P2P_DB_HOST=localhost P2P_DB_PORT=3306 P2P_DB_NAME=p2p_chat P2P_DB_USER=root P2P_DB_PASSWORD=your_password # 安全配置 P2P_USE_TLS=true P2P_CERT_FILE=/path/to/cert.pem P2P_KEY_FILE=/path/to/key.pem ``` ### 配置文件 也可以直接修改 `config.py` 中的默认值。 ## 部署到 openEuler 服务器 ### 1. 安装依赖 ```bash sudo dnf update -y sudo dnf install -y python3 python3-pip python3-devel sudo dnf install -y portaudio-devel ffmpeg opus-devel mysql-server mysql-devel ``` ### 2. 部署项目 ```bash mkdir -p /opt/p2p-chat cd /opt/p2p-chat # 上传项目文件 # scp -r ./* user@server:/opt/p2p-chat/ python3 -m venv venv source venv/bin/activate pip install -r requirements.txt ``` ### 3. 配置防火墙 ```bash sudo firewall-cmd --permanent --add-port=8888/tcp sudo firewall-cmd --permanent --add-port=8889/udp sudo firewall-cmd --reload ``` ### 4. 设置系统服务 创建 `/etc/systemd/system/p2p-chat.service`: ```ini [Unit] Description=P2P Chat Server After=network.target [Service] Type=simple User=root WorkingDirectory=/opt/p2p-chat Environment=PATH=/opt/p2p-chat/venv/bin ExecStart=/opt/p2p-chat/venv/bin/python run_server.py Restart=always [Install] WantedBy=multi-user.target ``` 启用服务: ```bash sudo systemctl daemon-reload sudo systemctl enable p2p-chat sudo systemctl start p2p-chat sudo systemctl status p2p-chat ``` ## 项目结构 ``` chatProgram/ ├── client/ # 客户端模块 │ ├── ui/ # GUI 组件 │ ├── app.py # 客户端应用 │ ├── connection_manager.py │ ├── file_transfer.py │ ├── image_processor.py │ ├── media_player.py │ └── voice_chat.py ├── server/ # 服务器模块 │ ├── database.py │ ├── relay_server.py │ └── repositories.py ├── shared/ # 共享模块 │ ├── message_handler.py │ ├── models.py │ └── security.py ├── tests/ # 测试 ├── config.py # 配置 ├── run_server.py # 服务器启动脚本 ├── run_client.py # 命令行客户端启动脚本 ├── run_client_gui.py # GUI 客户端启动脚本 └── requirements.txt # 依赖 ``` ## 测试 ```bash # 运行所有测试 pytest # 运行特定测试 pytest tests/test_relay_server.py -v # 运行集成测试 pytest tests/test_integration.py -v ``` ## License MIT