首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

多執行緒 Socket 類別設計:支援 TCP/UDP、事件回調與自動執行緒管理

     編輯:關於.NET

在網路程式設計中,一個健壯的 Socket 封裝類別應支援多執行緒、提供事件回調、並免除視窗控制代碼的依賴。本文介紹一個同時支援 TCP 與 UDP、內建自動執行緒管理、並提供連線建立、斷開、失敗與資料接收(含零位元組封包)四大事件的 Socket 類別設計。

核心優勢

  • 無視窗控制代碼依賴,適用於主控台與服務應用程式
  • 內建自動執行緒支援,簡化非同步操作
  • 同時支援 Client/Server 模式與 TCP/UDP 協定
  • 完整的事件模型:OnConnect、OnDisconnect、OnConnectFailed、OnDataReceived
  • 可靠的 TCP/IP 錯誤處理機制

TCP/IP 協定堆疊基礎

協定層級

TCP/IP 模型較 OSI 精簡,包含:

  • IP 層:無連線、不可靠傳輸,負責路由與分片重組
  • UDP:無連線、不可靠,在 IP 基礎上加入連接埠與檢查碼
  • TCP:面向連線、可靠,提供虛擬迴路與流量控制

IP 位址與連接埠

IPv4 為 32 位元,分為網路 ID 與主機 ID。A/B/C/D 類網路使用不同位數作為網路位址。常用連接埠如 HTTP(80)、FTP(21)、SMTP(25) 等皆為知名連接埠(1-1023 保留),自訂應用應使用 1024 以上連接埠。

Socket 程式設計流程

TCP 面向連線模式

伺服器端:socket() → bind() → listen() → accept() → read()/write()

客戶端:socket() → connect() → read()/write()

UDP 無連線模式

雙方皆需 bind(),使用 sendto()/recvfrom() 傳遞資料,每次傳送需指定遠端地址。

類別使用範例

建立伺服器端 Socket

// 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();

建立客戶端 Socket

// 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 兩個虛擬函數。預設實作為空,開發者根據需求覆寫即可處理接收資料與連線狀態變更事件。

IP 位址結構示意圖

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

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved