# OpenIM **Repository Path**: brt2/open-im ## Basic Information - **Project Name**: OpenIM - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-20 - **Last Updated**: 2025-10-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 最小化IM系统 这是一个使用Python实现的最小化点对点聊天系统,支持文本消息和文件传输功能。 ## 功能特性 - 点对点实时聊天 - 支持文本消息传输 - 支持文件传输 - 房间/群组聊天功能 - 用户身份识别 - 多种客户端界面(命令行和图形界面) ## 技术栈 - Python 3.7+ - websockets库(用于WebSocket通信) - Tkinter(用于图形界面) ## 安装依赖 ```bash pip install -r requirements.txt ``` ## 项目结构 ``` OpenIM/ ├── server.py # 服务器端程序 ├── requirements.txt # 项目依赖 ├── README.md # 说明文档 └── client/ # 客户端程序目录 ├── main.py # 客户端启动入口 ├── base_client.py # 客户端抽象基类 ├── cli_client.py # 命令行客户端实现 ├── gui_client.py # 图形界面客户端实现 └── __init__.py # Python包初始化文件 ``` ## 使用方法 ### 启动服务器 在一台主机上运行服务器程序: ```bash python server.py ``` 默认情况下,服务器会在 `0.0.0.0:18229` 上监听连接。 ### 启动客户端 进入客户端目录并运行主程序: ```bash python -m client [客户端类型] ``` 客户端类型包括: 1. **命令行客户端 (CLI)**:纯文本界面,适合服务器环境或偏好命令行的用户 ```bash python -m client cli ``` 2. **图形界面客户端 (GUI)**:提供图形用户界面,适合普通用户 ```bash python -m client gui ``` 3. **Web客户端 (Web)**:基于浏览器的客户端,无需安装额外软件 ```bash python -m client web ``` 启动后,打开浏览器访问 `http://localhost:8080` 即可使用Web客户端。 ### 连接到服务器 在客户端启动后,需要提供以下信息: - 服务器地址:服务器的IP地址和端口(例如:ws://192.168.1.100:18229) - 用户ID:您的唯一标识符 - 用户名:您希望显示的名称 - 房间ID:要加入的房间名称(相同房间的用户可以互相聊天) ### 聊天功能 1. **发送文本消息**: - CLI:直接输入文字并按回车 - GUI:在输入框中输入文字,按回车或点击"发送"按钮 2. **发送文件**: - CLI:输入 `/sendfile` 命令,然后按提示操作 - GUI:点击"发送文件"按钮,选择要发送的文件 3. **接收文件**: - CLI:当收到文件时,会提示是否保存,按提示操作即可 - GUI:当收到文件时,会弹出保存对话框,选择保存位置即可 ## 客户端类型详细介绍 ### 命令行客户端 (CLI) - 轻量级,资源占用少 - 适合服务器环境或远程连接使用 - 支持所有基本聊天功能 - 使用简单命令进行操作 ### 图形界面客户端 (GUI) - 提供直观的用户界面 - 实时显示在线用户列表 - 消息滚动显示区域 - 方便的文件发送和接收操作 ## 系统架构 ### 服务器端 (server.py) - 使用WebSocket协议进行实时通信 - 管理用户连接和房间分配 - 广播消息给房间内的所有用户 - 处理文件传输请求 ### 客户端架构 采用面向对象设计,基于抽象基类实现: 1. **BaseChatClient**:抽象基类,定义了所有客户端的通用接口 2. **CLIClient**:命令行客户端实现 3. **GUIClient**:图形界面客户端实现 这种设计使得: - 容易扩展新的客户端类型 - 保证了不同客户端实现的一致性 - 便于维护和测试 ## 注意事项 1. 确保服务器主机的防火墙允许18229端口的通信 2. 客户端需要能够访问服务器的IP地址和端口 3. 文件传输使用Base64编码,大文件可能会影响性能 4. 本系统为最小化实现,未包含加密等安全措施,请勿用于敏感信息传输 ## 扩展建议 1. 添加消息加密功能 2. 实现用户认证机制 3. 增加消息历史记录功能 4. 支持表情符号和富文本消息 5. 添加好友系统 6. 实现离线消息存储 7. 支持多窗口聊天 8. 添加语音/视频通话功能