Skip to content

JanYork/zig-group-chat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

zig-im - 一个简单的 Zig 实现的即时聊天应用

这是一个使用 Zig 编程语言实现的简单客户端-服务器即时聊天应用。它展示了基本的网络编程概念,包括 TCP 套接字、线程处理和消息广播。

功能

  • 服务器端 (Server):

    • 监听指定端口 (默认 9000) 等待客户端连接
    • 为每个连接的客户端创建独立线程进行处理
    • 收到客户端消息后广播给所有连接的客户端
    • 支持最多 128 个同时在线客户端
  • 客户端 (Client):

    • 连接到指定服务器和端口 (默认 127.0.0.1:9000)
    • 后台线程处理服务器消息接收和显示
    • 命令行界面输入消息发送到服务器
    • 支持通过输入 "quit" 退出应用

构建

  1. 确保已安装 Zig 编译器 0.13.0 或更高版本
  2. 在项目根目录执行构建命令:
zig build

构建完成后,可执行文件将生成在 zig-out/bin/ 目录下。

运行

启动服务器

zig-out/bin/server

服务器将启动并监听 9000 端口。

启动客户端

在新的终端窗口中执行:

zig-out/bin/client

客户端将连接到本地服务器。你可以启动多个客户端进行测试。

使用

  1. 启动服务器
  2. 启动一个或多个客户端
  3. 在客户端输入消息并按 Enter 发送
  4. 所有客户端都会收到并显示消息
  5. 输入 "quit" 退出客户端

项目结构

zig-im/
├── src/
│   ├── server.zig   # 服务器端代码
│   └── client.zig   # 客户端代码
├── build.zig        # Zig 构建配置
├── zig-out/         # 构建输出目录
└── README.md        # 项目说明文档

实现细节

服务器端

  • 使用 std.net 模块实现 TCP 服务器
  • 为每个连接的客户端创建独立线程
  • 使用互斥锁保护客户端列表
  • 线性查找客户端列表进行添加/移除操作

客户端

  • 使用 std.net 模块实现 TCP 客户端
  • 一个线程用于读取用户输入
  • 一个后台线程用于接收服务器消息
  • 使用 POSIX read 系统调用直接读取标准输入

限制

  • 服务器最大支持 128 个客户端连接
  • 消息缓冲区大小固定为 1024 字节
  • 没有用户身份验证
  • 没有消息加密
  • 单服务器,不支持扩展

技术栈

  • 语言: Zig
  • 网络: 标准库 std.net
  • 线程: 标准库 std.Thread
  • 构建系统: Zig Build System

About

A minimal intranet broadcast group chat implemented using Zig.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages