在C#中实现Socket端口复用
因為在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://files.cnblogs.com/wzd24/28135640620.rar去下載。
總結
以上是生活随笔為你收集整理的在C#中实现Socket端口复用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 给手机浏览器减负 轻装上阵才能速度制胜
- 下一篇: 对C语言进行调试的最好方法是什么?