C#網絡編程實際就是對WinSock進行了進一步的包裝。
1. IPAddress,IPEndPoint, SocketAddress類
IPAddress就是一個IP 地址類, IPEndPoint就是IPAddress+Port,對應的就是sockaddr_in這個struct. SocketAddress類可以存儲IPEndPoint類序列化以後的信息。
1.1 這兩個類常用和注意的一些地方:¼
1) IPAddress ip = IPAddress.Parse("192.168.123.1");
2) IPAddress.Any is 0.0.0.0, 這個用在當系統中有多個網絡接口,而用戶不想把套接字綁定在任何接口上的時候。
3) IPAddress.None is 255.255.255.255, 它經常用來創建一個偽套接字。
4) 得到本機IP地址的一個方法: Dns.GetHostByName(Dns.GetHostName()).AddressList[0]
2, C#中的套接字類System.Net.Sockets.Socket
public Socket(
AddressFamily addressFamily,
SocketType socketType,
ProtocolType protocolType
);
在上面的構造函數中,SocketType與ProtocolType要自己對應。對應關系如下:
Dgram(UDP) 無連接通信
Stream (TCP) 面向連接的通信
Raw (ICMP) ICMP協議
Raw (Raw) 簡單IP包
Socket t = new Socket( AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp );
2.1 套接字Socket類常用屬性和函數
Blocking 用來設置socket是否堵塞
Connected 指示 Socket 是否已連接到遠程主機. 即使 Connected 返回 true,也無法保證 Socket 仍處於 Connected 狀態。true 值僅意味著在上次 I/O 操作時 Socket 處於連接狀態.
SetSocketOption()方法,將指定的 Socket 選項設置為指定值,看起來就是設置協議包頭的一些值。(選項太多,看看MSDN,用google查查,可以找到很多例子)
其他的方法,例如bind(),listen(),send(),receive()和WinSocket本質都一樣。(略)
2.2 Socket異常, SocketException
2.3為了簡化Socket操作,C#提供了3個套接字助手:
TcpClient, TcpListener, UdpClient