C# 網路程式設計本質是對 WinSock 的進一步封裝。掌握核心類別 IPAddress、IPEndPoint、Socket 及三大助手類別,即可高效開發 TCP/UDP 應用。
IPAddress:IP 位址封裝,支援 IPv4/IPv6。IPEndPoint:IPAddress + Port,對應 C 的 sockaddr_in。SocketAddress:序列化後的 EndPoint 資料,供底層互操作使用。IPAddress ip = IPAddress.Parse("192.168.123.1");
IPAddress.Any // 0.0.0.0 綁定所有介面
IPAddress.None // 255.255.255.255 建立虛擬 Socket
// 取得本機第一張網卡 IP
IPAddress local = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0];
public Socket(AddressFamily af, SocketType st, ProtocolType pt);
| SocketType | ProtocolType | 協定 | 特性 |
|---|---|---|---|
| Dgram | UDP | UDP | 無連線、資料報 |
| Stream | TCP | TCP | 面向連線、可靠串流 |
| Raw | ICMP | ICMP | 原始封包、Ping等 |
| Raw | Raw | IP | 原始 IP 封包 |
// TCP Socket 範例
Socket tcp = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
Blocking:同步/非同步模式切換。Connected:僅反映最後一次 I/O 狀態,不可作為即時連線檢測依據。SetSocketOption():設定協定層選項 (TTL、KeepAlive、ReuseAddress 等),詳見 MSDN。Bind/Listen/Accept/Send/Receive:與 WinSock 對應,同步阻塞模式。SocketException 擷取錯誤碼 (SocketErrorCode),依據錯誤碼決定重試、斷線或記錄。
TcpClient / TcpListener:TCP 客戶端/伺服器高階封裝,內建 NetworkStream。UdpClient:UDP 收發封裝,支援多播。建議:簡單專案優先用助手類別;需精細控制 (效能、選項、非同步) 再直接操作 Socket。
熟記型別對應表、Connected 語意限制、三大助手類別適用場景,能避開 80% 的網路程式設計坑點。