Skip to content

yllmis/IM_System

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

简易即时通讯(IM)示例项目

本项目是一个用 Go 实现的教学/演示型即时通讯(IM)服务与客户端。代码结构简单,便于理解基于 TCP 的聊天服务器、用户管理、消息广播与简单的私聊/改名指令实现。

目录结构

  • client.go — 控制台客户端实现(包含菜单、发送/接收逻辑)
  • server.go — 聊天服务器主逻辑(连接处理、广播、消息通道)
  • user.go — 用户抽象(在线/离线、消息处理、私聊/改名/查询在线用户)
  • main.go — 启动服务器的入口
  • go.mod — 模块/Go 版本信息

说明:本仓库包含服务端和客户端的源文件。它们都在 package main,但有各自的 main() 入口,因此请按下面的说明分别构建/运行服务端和客户端。

功能

  • 多用户在线广播聊天
  • 私聊(to|用户名|消息)
  • 查询在线用户(who)
  • 修改用户名(rename|新用户名)
  • 超时强制下线(服务端默认 300s 无活动)

简要协议(文本)

客户端通过向服务器发送文本命令与消息(每条以换行符 \n 结束)。常见命令:

  • who — 请求服务器返回当前在线用户列表
  • rename|新用户名 — 修改当前客户端用户名(若已被占用,服务器会返回提示)
  • to|用户名|消息内容 — 向指定用户名发送私聊消息
  • 其它任何非以上格式的文本均视为群聊消息,由服务器广播给所有在线用户

服务器广播消息的格式为:[addr]name: message(服务器内部发送时会在每条消息后追加换行)

注意:消息结尾需要换行符(客户端的发送函数会自动在文本后追加 \n)。

依赖与运行环境

  • 需要安装 Go,项目 go.mod 指定了 go 1.25.3(向后兼容通常可在较新的 Go 版本上运行)。

在 Windows(PowerShell)下的构建与运行示例:

构建服务端(已默认构建好server.exe)

cd D:\Learn\Computer\Go\IM_System
# 单独构建 server(只包含 server 相关的 .go 文件)
go build -o im_server.exe main.go server.go user.go

或者直接运行(不生成二进制):

go run main.go server.go user.go

构建客户端(已默认构建好client.exe)

cd D:\Learn\Computer\Go\IM_System
go build -o im_client.exe client.go

或者直接运行:

go run client.go

运行示例

  1. 在一个终端启动服务端:
.\im_server.exe
# 或者 go run main.go server.go user.go
  1. 在另一个或多个终端启动客户端:
.\im_client.exe -ip 127.0.0.1 -port 5080
# 或者 go run client.go -ip 127.0.0.1 -port 5080

客户端启动后会显示菜单(公聊 / 私聊 / 修改用户名 / 退出),按提示输入即可。

使用示例

  • 改名:在客户端选择“3. 修改用户名”,输入 张三,客户端向服务器发送 rename|张三
  • 查看在线用户:选择私聊模式或直接发送 who,服务器会返回在线列表。
  • 私聊:使用 to|李四|你好 格式发送私聊消息。

常见问题与注意事项

  • 不能一次性对所有文件运行 go build,因为 client.gomain.go(server 的入口)都定义了 main(),若不指定文件将导致重复 main 定义错误。请按上面方法分别构建服务端与客户端。
  • 用户名必须唯一;改名到已存在的用户名会被拒绝。
  • 消息是以简单文本协议实现,未做加密或认证,适合学习/演示,不适合生产环境。

可改进的方向

  • 将 client/server 拆分到不同的包或子目录,使用模块化命令行构建脚本
  • 增加 JSON 或二进制协议以支持更复杂的消息类型
  • 添加用户认证、持久化在线/聊天记录、群组管理、消息撤回等功能
  • 增加单元测试与集成测试

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages