Skip to content

🕸️ Real-time chatroom application leveraging Python sockets with encryption, GUI, and advanced server controls.

Notifications You must be signed in to change notification settings

xxrjun/socket-chatroom

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Socket Programming Chatroom 🕸️

DEMO

Features

Client

  • 使用者登入:提供使用者建立唯一使用者名稱、登入並建立安全連線。
  • 即時訊息傳遞:參與共享聊天室,即時交換訊息。
  • 線上成員顯示:即時顯示線上成員列表。
  • 訊息時間戳:每則訊息均附有精確的時間戳。
  • 自動重新連線:支援當使用者意外斷線時,自動重新連線功能,無須重啟應用程式。

Server Monitor

  • 連線總覽:提供所有連線的即時資訊,包括連線狀態與持續時間(連線中、離線、重連中)。
  • 手動管理:管理員可手動中斷特定使用者的連線。
  • 閒置超時處理:自動中斷超過預設閒置時間的使用者連線,節省伺服器資源。
  • 廣播訊息:支援伺服器端廣播訊息,傳遞給所有連線使用者。
  • 伺服器全面控制:提供終止所有連線或關閉伺服器的選項。
  • 圖形介面:提供直觀的圖形介面,用於監控與管理伺服器活動。

Environment

Setup

conda create -n sp-chat python=3.12
conda activate sp-chat
pip install -r requirements.txt

Requirements

Item Version/Name
Python 3.12
GUI Tkinter
Encryption cryptography
Socket Python Socket

Usage

Config

You can modify the configuration in config.py or .env file. For .env.example, you can rename it to .env and modify the content.

# Network Configurations
CHAT_SERVER_HOST=0.0.0.0
CHAT_CLIENT_HOST=127.0.0.1
CHAT_TCP_PORT=5000
CHAT_UDP_PORT=5001
CHAT_BUFFER_SIZE=1024
CHAT_IDLE_TIMEOUT=60

# Client Configurations
CHAT_RECONNECT_DELAY=3
CHAT_MAX_RETRIES=3

# AES key and IV (Must match server and client)
CHAT_SECRET_KEY=this_is_a_32_byte_key_demo123456
CHAT_IV=0123456789ABCDEF

Run Server

./scripts/run_server.sh

Run Client

./scripts/run_client.sh

Example (Single Server & 3 Clients)

python scripts/example.py

Grading

Implementation (90%)

Baseline (80%): Basic TCP or UDP application like sample codes (Single-Client Blocking Connection)

Item Description Bonus Checked Explanation
Multi-client connections 支援多用戶端連線。 +10
Multi-process or multi-thread 使用多進程或多執行緒提升效能。 +10 Server, GUI, Monitor, Client Connection, Presence Broadcast 等擁有各自的 Thread
GUI 增加圖形使用者介面。 +10 Server Monitor 以及 Chatroom 皆有 GUI
Message split 處理超出 buffer 大小的訊息分割問題。 +5 使用兩個 recv,第一個用於確定長度,第二個用於取得訊息的資料部分。
Use both UDP & TCP and Explain why 同時使用 TCP 和 UDP,並解釋此設計的必要性及優勢。 +5 訊息傳遞需要確保順序性以及穩定性,故使用 TCP廣播在線使用者需要即時性,但就算有部分遺失也沒關係,下次廣播也會再次發送,故使用 UDP,節省伺服器資源並提高傳輸銷率。
Message encryption & decryption 實現訊息加密與解密,並解釋設計理念與加解密方式。 +5 為求簡單,僅使用 Symmetric Encryption (AES-CBC + PKCS7 padding)。實務上先使用 Asymmetric 做 Key Exchange,後續傳輸皆使用 Symmetric 會比較好,安全性與效率兼顧。
Timeout handling 設計機制處理閒置或未正常關閉的連線,避免資源耗盡。 +5 追蹤 Client 的 last_active,若超過 IDLE_TIMEOUT 便會中斷 Client 連線。
Disconnection handling & Auto Reconnection 如果用戶端斷線,自動重新連接,而非重新啟動用戶端。 +5 若 Client 並非因關閉而導致連線中斷,Client 會在 MAX_RETRIES 次數內自動嘗試重新連線。
Multi-Port Listing 為不同連線需求(如傳訊、廣播、影音串流等)提供不同的連接埠。 +5 傳訊使用 TCP (default= 5000)、廣播使用 UDP (default=5001)
Nonblocking and explain why 實現非阻塞模式,並解釋如何避免多用戶或大量訊息時其他功能被阻塞。 +5 使用 Multi-threaded 來達到類似 Nonblocking 的效果。使用 select 會是比較正確的做法
P2P 挑戰實現基於 P2P 的分散式下載。 +20

Report (10%)

請參照 llm_enhancement

使用大型語言模型 (LLM) 提升程式碼品質,如可讀性、結構優化、解耦合、可維護性、錯誤處理等),撰寫簡易報告,包含以下議題:

Report Sections Description Checked
Prompt 的設計與使用的大型語言模型 說明 Prompt 的設計及所使用的 LLM。
優化後的程式碼與原始程式碼的比較 比較優化後與原始程式碼,針對不同的優化方向進行探討。
LLM 的有效性與局限性 評估 LLM 的有效性與局限性。
LLM 在作業中其他應用方向 探討除了提升程式碼品質外,還可以如何應用 LLM。

Flowchart

Client

flowchart TD
    A[啟動應用] --> B[初始化GUI]
    B --> C{是否有命令行參數?}
    C -- 是 --> D[使用命令行提供的使用者名稱]
    C -- 否 --> E[彈出對話框輸入使用者名稱]
    D & E --> F[建立TCP連接]
    F --> G{連接成功?}
    G -- 是 --> H[啟動接收訊息執行緒]
    G -- 否 --> I[嘗試重新連接]
    H --> J[啟動監聽UDP執行緒]
    I --> G
    J --> K[等待使用者輸入並發送訊息]
    K --> L[接收並顯示訊息]
    L --> K
Loading

Server

flowchart TD
    A[啟動伺服器] --> B[初始化伺服器GUI]
    B --> C[啟動主伺服器執行緒]
    C --> D[監聽TCP連接]
    D --> E[接收新客戶端連接]
    E --> F[處理客戶端認證]
    F --> G{驗證成功?}
    G -- 是 --> H[加入客戶端列表]
    G -- 否 --> I[拒絕連接]
    H --> J[廣播用戶上線]
    H --> K[啟動客戶端處理執行緒]
    K --> L[接收並轉發訊息]
    K --> M{客戶端斷線?}
    M -- 是 --> N[移除客戶端並廣播離線]
    D --> O[定時廣播在線用戶]
    C --> P[監控閒置用戶]
    P --> Q{用戶閒置超時?}
    Q -- 是 --> R[斷線並通知用戶]
    B --> S[處理管理員操作]
    S --> T[廣播訊息/踢除用戶/關閉伺服器]
Loading

About

🕸️ Real-time chatroom application leveraging Python sockets with encryption, GUI, and advanced server controls.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published