在.net下進行網絡編程其實也相對比較簡單,因為在.net類庫已經提供了大量封裝好的類。在.net下網絡編程比較底層的類是System.Net.Sockets.Socket類,這個類提供了豐富的方法和屬性,并且還提供了異步數據傳輸支持。 對Socket類做一個簡單的介紹,它有如下常見方法: public Socket Accept ():為新建連接創建新的 Socket。 public void Bind (EndPoint localEP):使 Socket 與一個本地終結點相關聯。 public void Close ():關閉 Socket 連接并釋放所有關聯的資源。注意這個方法有沖載方法。 public void Connect (EndPoint remoteEP):建立與遠程主機的連接。注意這個方法有重載方法。 public void Disconnect (bool reuseSocket):關閉套接字連接并是否允許重用套接字。 public void Listen (int backlog):將 Socket 置于偵聽狀態。 public int Receive (byte[] buffer):接收來自綁定的 Socket 的數據。注意這個方法有重載方法。 public int ReceiveFrom (byte[] buffer,ref EndPoint remoteEP):接收數據報并存儲源終結點。注意這個方法有重載方法。 public int Send (byte[] buffer):將數據發送到連接的 Socket。注意這個方法有重載方法。 public void SendFile (string fileName):將文件和可選數據異步發送到連接的 Socket。注意這個方法有重載方法。 public int SendTo (byte[] buffer,EndPoint remoteEP):將數據發送到特定終結點。注意這個方法有重載方法。 public void Shutdown (SocketShutdown how):禁用某 Socket 上的發送和接收。 說明: 因為在網絡傳輸時傳輸的數據都是二進制形式的(表現為字節數組),所以如果要傳輸類似于中文這樣的雙字節字符就需要在傳輸之前用合適的編碼轉換成字節數組,然后接收方按照發送方的編碼將接收到字節數組轉換成字符串。另外,注意接收數據的時候是先聲明了一個字節數組,然后將接收到的數據保存到字節數組中,這個方法有個返回值表示實際接收了多少字節數據。這是因為數組是不可變的,假如聲明了一個1024字節大小的數組,而發送方僅發送1字節數據,而接收方并不直到發送方發送的數據量把整個1024字節當作發送發送的數據的話,最終會發生錯誤。 要實現一個服務器端的面向連接的Socket用于接收客戶端的請求的話,有如下步驟: (1)首先根據ip地址和端口號實例化一個Socket,注意端口要要大于1024并且不要使用特殊端口號,要大于1024的原因是1024以下的端口號已經被指派了,而1433、3306這樣的端口號已經被用作SQL Server和MySQL的默認端口號了,若指定為這些端口號容易發生沖突。 (3)接著調用Bind()方法進行綁定,然后再調用Listen()方法用于監聽,Listen()方法的參數用于指定監聽的隊列大小,也就是最多可容納的等待接受的傳入連接數。 (4)再調用Accept()方法,調用這個方法之后會是程序處于阻塞狀態,直至有客戶端連接為止。當有客戶端連接,這個方法將會返回一個新的Socket,使用這個Socket與客戶端進行通訊。 (5)使用Accept()方法返回的新Socket的Send()方法就可以向客戶端發送數據了,還可以使用這個新Socket的Receive()接收客戶端的數據。 (6)最后終止與客戶端會話時,注意使用ShutDown()方法關閉Socket連接,并且使用Close()方法釋放所占用的資源。