Borland C++Builder 的 TServerSocket 與 TClientSocket 封裝了 Windows Socket API,大幅簡化 TCP/IP 通訊程式開發。本文詳細說明關鍵屬性設定、事件處理流程與非阻塞/阻塞模式選擇。
伺服器端關鍵屬性
Active:啟動/停止監聽。
Port:監聽埠號 (>1024)。
ServerType:stNonBlocking (非阻塞,預設) 或 stThreadBlocking (執行緒阻塞,需自行管理執行緒)。
ThreadCacheSize:阻塞模式下的執行緒快取數。
客戶端關鍵屬性
Active:建立/斷開連線。
Host/Address:伺服器主機名或 IP。建議用 Address 避免 DNS 解析延遲。
Port:對應伺服器監聽埠。
ClientType:ctNonBlocking (預設) 或 ctBlocking。
伺服器端核心事件
| 事件 | 觸發時機 | 典型處理 |
OnClientConnect | 客戶端嘗試連線 | 決定是否接受 (設 Accept 參數) |
OnAccept | 連線成功建立 | 連線可用,可收發資料 |
OnClientRead | 收到客戶端資料 | 接收處理資料 |
OnClientWrite | 發送資料完成 | 後續發送邏輯 |
OnClientDisconnect | 連線斷開 | 清理資源、移除連線清單 |
OnClientError | 發生錯誤 | 設 ErrorCode=0 抑制預設訊息,依 ErrorEvent 類型處理 |
客戶端核心事件
| 事件 | 觸發時機 | 典型處理 |
OnConnecting | 正在連線 | 更新 UI 狀態 |
OnConnect | 連線成功 | 可開始發送資料 |
OnRead | 收到伺服器資料 | 接收處理 |
OnWrite | 發送完成 | 後續邏輯 |
OnDisconnect | 連線斷開 | Active=false,需重連 |
OnError | 錯誤 | 同伺服器端處理 |
開發建議
- 非阻塞模式 (
stNonBlocking/ctNonBlocking) 程式較簡單,事件驅動自動處理多連線。
- 阻塞模式需自行建立執行緒處理每連線,適合簡單單連線場景。
- 錯誤事件中設
ErrorCode = 0 可避免彈出英文錯誤對話框。