Chương trình chat client-server được viết bằng C, sử dụng đa luồng (multithreading) và đồng bộ hóa (threading & synchronization).
- Chat nhiều phòng: Hỗ trợ tạo và tham gia nhiều phòng chat
- Đa luồng: Server xử lý nhiều client đồng thời, client có thread riêng cho nhận/gửi tin nhắn
- Đồng bộ hóa: Sử dụng mutex để đảm bảo thread-safe
- Tìm phòng theo ID: Client có thể tìm và tham gia phòng theo ID
- Username: Client bắt đầu bằng việc nhập username
chat_system/
├── server/
│ └── server.c # Server chính
├── client/
│ └── client.c # Client chính
├── common/
│ ├── protocol.h # Định nghĩa protocol và cấu trúc
│ └── utils.c # Utility functions
├── Makefile # Build system
└── README.md # Tài liệu này
- GCC compiler
- POSIX threads (pthread)
- Linux/macOS
# Build tất cả
make all
# Hoặc build riêng lẻ
make chat_server
make chat_client
# Build với debug symbols
make debug
# Build optimized release
make release# Terminal 1
./chat_server# Terminal 2 (và các terminal khác cho nhiều client)
./chat_client
# Hoặc kết nối đến server khác
./chat_client 192.168.1.100 8080| Lệnh | Mô tả |
|---|---|
/join <username> |
Đăng nhập với username |
/create <room_name> |
Tạo phòng mới |
/room <room_id> |
Tham gia phòng theo ID |
/leave |
Rời khỏi phòng hiện tại |
/list |
Liệt kê tất cả phòng |
/quit |
Thoát chương trình |
<message> |
Gửi tin nhắn (khi đã tham gia phòng) |
> /join alice
[12:34:56] Chào mừng alice đến với chat server!
> /create phong1
[12:34:57] Phòng phong1 đã được tạo với ID: 1
> /room 1
[12:34:58] Đã tham gia phòng phong1 (ID: 1)
> Xin chào mọi người!
[12:34:59] alice: Xin chào mọi người!
> /join bob
[12:35:00] Chào mừng bob đến với chat server!
> /list
[12:35:01] Danh sách phòng: ID:1 Name:phong1 Members:1
> /room 1
[12:35:02] Đã tham gia phòng phong1 (ID: 1)
[12:35:02] SERVER: bob đã tham gia phòng
[12:35:02] alice: Xin chào mọi người!
> Chào alice!
[12:35:03] bob: Chào alice!
- Main thread: Chấp nhận kết nối mới
- Client handler threads: Mỗi client có 1 thread riêng
- Mutex locks: Đồng bộ hóa truy cập shared data
- Main thread: Xử lý input từ user
- Receive thread: Nhận messages từ server
- Mutex: Đồng bộ hóa socket operations
- Room mutex: Mỗi phòng có mutex riêng cho thread-safe broadcasting
- Global mutex: Bảo vệ danh sách rooms và clients
- Socket mutex: Client bảo vệ socket operations
MSG_JOIN: Client đăng nhậpMSG_CREATE_ROOM: Tạo phòng mớiMSG_JOIN_ROOM: Tham gia phòngMSG_LEAVE_ROOM: Rời phòngMSG_MESSAGE: Gửi tin nhắnMSG_LIST_ROOMS: Liệt kê phòngMSG_QUIT: ThoátMSG_BROADCAST: Broadcast tin nhắnMSG_ERROR: Thông báo lỗi
# Chạy test tự động
make test
# Test thủ công
# Terminal 1: ./chat_server
# Terminal 2: ./chat_client
# Terminal 3: ./chat_client-
"Address already in use"
# Tìm và kill process đang dùng port lsof -i :8080 kill -9 <PID>
-
"Connection refused"
- Đảm bảo server đang chạy
- Kiểm tra IP và port
-
Thread errors
- Đảm bảo có pthread library
- Kiểm tra compiler flags
# Build với debug symbols
make debug
# Chạy với gdb
gdb ./chat_server
gdb ./chat_clientChương trình được phát triển như một bài tập về:
- Socket programming
- Multithreading với pthread
- Thread synchronization
- Client-Server architecture