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

C# 網路程式設計核心類別體系:IPAddress、IPEndPoint、Socket 完整指南

     編輯:關於C語言

位址與端點類別

IPAddress


// 解析 IP 字串
IPAddress ip = IPAddress.Parse("192.168.123.1");

// 特殊位址
IPAddress.Any     // 0.0.0.0  綁定所有介面
IPAddress.None    // 255.255.255.255 廣播/偽裝位址
IPAddress.Loopback // 127.0.0.1 本機回環

// 取得本機 IP(舊 API,建議改用 Dns.GetHostEntry)
IPAddress local = Dns.GetHostEntry(Dns.GetHostName())
    .AddressList.First(a => a.AddressFamily == AddressFamily.InterNetwork);

IPEndPoint

IP + Port 組合,對應底層 sockaddr_in 結構:


var endPoint = new IPEndPoint(IPAddress.Any, 8080);

SocketAddress

IPEndPoint 序列化後的不透明位址資料,用於底層互操作。

Socket 核心類別

建構式與協定對應


var socket = new Socket(
    AddressFamily.InterNetwork, // IPv4
    SocketType.Stream,          // TCP
    ProtocolType.Tcp            // 必須與 SocketType 對應
);
SocketTypeProtocolType協定特性
StreamTcpTCP面向連線、可靠、有序
DgramUdpUDP無連線、不可靠、訊息邊界
RawIcmpICMP原始封包、需管理員權限
RawRawIP自訂 IP 協定

關鍵屬性與方法

  • Blocking:同步/非同步模式切換
  • Connected:連線狀態(注意:僅反映最後一次 I/O 操作時狀態)
  • SetSocketOption:設定 SO_REUSEADDR、SO_KEEPALIVE、TCP_NODELAY 等
  • Bind/Listen/Accept/Send/Receive:核心操作

異常處理


try { socket.Connect(ep); }
catch (SocketException ex) when (ex.SocketErrorCode == SocketError.ConnectionRefused)
{
    // 處理連線被拒
}

高階封裝類別

簡化常見 TCP/UDP 操作:

  • TcpClient / TcpListener:TCP 客戶端/伺服器
  • UdpClient:UDP 通訊
  • 內部仍使用 Socket,提供更安全、簡潔的 API

最佳實踐建議

  1. 優先使用 TcpClient/TcpListener/UdpClient
  2. 非同步操作採用 async/await + SocketAsyncEventArgs 或 Task 封裝
  3. 實作連線池、心跳檢測、優雅關閉邏輯
  4. 生產環境啟用 SocketOptionName.KeepAlive
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved