.NET Socket TCP/UDP程式入門基礎《建構Socket執行個體》

Socket類別同時支援多種形式網路程式開發,許多網路通訊相關的類別都是以它為基礎衍伸而來,像之前所提的TcpClient、TcpListener與UdpClient等等。實際上個人也最喜歡用這個類別來開發網路通訊程式,雖然用Socket類別寫起來比較囉唆一點。

     Socket類別同時支援多種形式網路程式開發,許多網路通訊相關的類別都是以它為基礎衍伸而來,像之前所提的TcpClient、TcpListener與UdpClient等等。實際上個人也最喜歡用這個類別來開發網路通訊程式,雖然用Socket類別寫起來比較囉唆一點。

       首先要講的當然是常用的建構函式,Socket 建構函式 (AddressFamily, SocketType, ProtocolType),這個建構函式傳入三個參數藉以建立一個Socket類別的執行個體。

參數一 AddressFamily:指定 Socket 將用來解析位址的定址配置。例如使用InterNetwork時,當 Socket 連接至端點時必須使用 IPv4位址。詳情可參考MSDN文件庫[AddressFamily 列舉型別]
參數二 SocketType:指定 Socket 類別的執行個體所表示的通訊端 (Socket) 類型。使用ProtocolType.TCP時此參數必須為SocketType.Stream;使用UDP時此參數必須為SocketType.Dgram。詳情可參考MSDN文件庫[SocketType 列舉型別]
參數三 ProtocolType:指定 Socket 類別支援的通訊協定。詳情可參考MSDN文件庫[ProtocolType 列舉型別]

       根據前述的說明,如果我們要建立一個TCP Socket時應如下所示:
       Dim mySocket as New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)

       如果我們要建立一個UDP Socket時應如下所示:
       Dim mySocket as New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)

       許多人會弄錯後面兩個參數的對應關係,所以提醒大家要特別注意這一點

       最後要提醒的是在幾個狀況下必須要在建立Socket執行個體後呼叫Socket.Bind方法,以便於將Socket與本機端點建立關聯:
       1. TCP Server Socket
       2. UDP 接收多點傳送封包
       3. UDP 使用 ReceiveFrom 方法接收無連接資料包