程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> 在C#中實現Socket端口復用

在C#中實現Socket端口復用

編輯:關於C#

一、什麼是端口復用:

因為在winsock的實現中,對於服務器的綁定是可以多重綁定的,在確定多重綁定使用誰的時候,根據一條原則是誰的指定最明確則將包遞交給誰,而且沒有權限之分。這種多重綁定便稱之為端口復用。

二、我們如何實現Socket端口復用:

其實我們要實現端口復用很簡單,我們只要使用SetSocketOption函數設置Socket選項就可以了。MSDN是這樣解釋的:

Socket 選項確定當前 Socket 的行為。對於具有 Boolean 數據類型的選項,指定非零值可啟用該選項,指定零值可禁用該選項。對於具有整數數據類型的選項,指定適當的值。Socket 選項按照協議支持程度來分組。

我們來看看這個函數是怎麼用的:

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 localEP = new IPEndPoint(IPAddress.Any, 20000);
socket1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket1.Bind(localEP);

再建立第二個Socket:

Socket socket2
IPEndPoint localEP = new IPEndPoint(IPAddress.Any, 20000);
socket2= new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket2.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
//請注意這一句。ReuseAddress選項設置為True將允許將套接字綁定到已在使用中的地址。
socket2.Bind(localEP);

這樣Socket1和Socket2便綁定在同一個端口上了。

例程源代碼我上傳到我的資源裡面大家可以到http://www.cnblogs.com/Files/wzd24/28135640620.rar去下載。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved