轉載:C# socket端口複用-多主機頭綁定

什麼是端口複用: 由於在winsock的實現中,對於服務器的綁定是能夠多重綁定的,在肯定多重綁定使用誰的時候,根據一條原則是誰的指定最明確則將包遞交給誰,並且沒有權限之分。這種多重綁定便稱之爲端口複用。 2、咱們如何實現Socket端口複用: 其實咱們要實現端口複用很簡單,咱們只要使用SetSocketOption函數設置Socket選項就能夠了。MSDN是這樣解釋的: Socket 選項肯定當前 Socket 的行爲。對於具備 Boolean 數據類型的選項,指定非零值可啓用該選項,指定零值可禁用該選項。對於具備整數數據類型的選項,指定適當的值。Socket 選項按照協議支持程度來分組。 咱們來看看這個函數是怎麼用的:html

 

public
 
void SetSocketOption (       SocketOptionLevel optionLevel,      SocketOptionName optionName,     int optionValue ) 

 

 參數 optionLevel SocketOptionLevel 值之一。 optionName SocketOptionName 值之一。 optionValue 該選項的值。 以上參數你們能夠去看看MSDN。我這裏就很少講了。 在這裏咱們
optionLevel 參數傳
SocketOptionLevel.Socket
;optionName參數傳SocketOptionName.ReuseAddress;optionValue參傳一個非零值,我傳的是True,若是要禁用的話,就傳False。 如: 編程

socket2.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); 

 

具體咱們看看下面的代碼: 服務器

 

複製代碼
//咱們首先創建第一個Socket: 
Socket socket1; IPEndPoint localEP1 = new IPEndPoint(IPAddress.Any, 20000); socket1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket1.Bind(localEP1); //再創建第二個Socket: Socket socket2; IPEndPoint localEP2 = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 20000); socket2 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket2.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); //請注意這一句。ReuseAddress選項設置爲True將容許將套接字綁定到已在使用中的地址。 socket2.Bind(localEP2)
複製代碼

 

 //請注意這一句。ReuseAddress選項設置爲True將容許將套接字綁定到已在使用中的地址。 socket2.Bind(localEP); 這樣Socket1和Socket2便綁定在同一個端口上了。 根據一條原則是誰的指定最明確則將包遞交給誰,意思就是根據多個Socket所Bind的IP地址來肯定鏈接交給誰。如:SocketA Bind IPAddress.Any,SocketB Bind 192.168.0.5,那麼客戶端鏈接192.168.0.5的話,鏈接會被交給SocketB來處理,而鏈接其它的IP地址將交給SocketA來處理。 端口複用真正的用處主要在於服務器編程:當服務器須要重啓時,常常會碰到端口還沒有徹底關閉的狀況,這時若是不設置端口複用,則沒法完成綁定,由於端口還處於被別的套接口綁定的狀態之中。socket

 

來源:https://www.cnblogs.com/viewcozy/p/4666137.html函數

相關文章
相關標籤/搜索