在網路程式設計中,一個健壯的 Socket 封裝類別應支援多執行緒、提供事件回調、並免除視窗控制代碼的依賴。本文介紹一個同時支援 TCP 與 UDP、內建自動執行緒管理、並提供連線建立、斷開、失敗與資料接收(含零位元組封包)四大事件的 Socket 類別設計。
TCP/IP 模型較 OSI 精簡,包含:
IPv4 為 32 位元,分為網路 ID 與主機 ID。A/B/C/D 類網路使用不同位數作為網路位址。常用連接埠如 HTTP(80)、FTP(21)、SMTP(25) 等皆為知名連接埠(1-1023 保留),自訂應用應使用 1024 以上連接埠。
伺服器端:socket() → bind() → listen() → accept() → read()/write()
客戶端:socket() → connect() → read()/write()
雙方皆需 bind(),使用 sendto()/recvfrom() 傳遞資料,每次傳送需指定遠端地址。
// TCP 模式
m_SocketObject.SetSmartAddressing(false);
m_SocketObject.CreateSocket(m_strPort, AF_INET, SOCK_STREAM, 0);
// UDP 模式
m_SocketObject.SetSmartAddressing(true);
m_SocketObject.CreateSocket(m_strPort, AF_INET, SOCK_DGRAM, SO_BROADCAST);
// 啟動監聽執行緒
m_SocketObject.WatchComm();
// TCP 連線
m_SocketObject.ConnectTo(strServer, m_strPort, AF_INET, SOCK_STREAM);
// UDP 連線
m_SocketObject.ConnectTo(strServer, m_strPort, AF_INET, SOCK_DGRAM);
m_SocketObject.WatchComm();
類別需繼承並實作 OnDataReceived 與 OnEvent 兩個虛擬函數。預設實作為空,開發者根據需求覆寫即可處理接收資料與連線狀態變更事件。

此設計大幅減少聊天室、IPC 等網路應用的開發複雜度,並提供生產級的可靠性保障。