我需要創建一個連接到服務器進程的套接字,但必須限制爲使用指定的本地適配器。默認行爲是使用任何可能的,但我需要確保給定的套接字只嘗試(例如)局域網連接,如果wifi和LAN都可用。設置套接字的本地端點
我正在使用C#和.NET 2.0。
乾杯
我需要創建一個連接到服務器進程的套接字,但必須限制爲使用指定的本地適配器。默認行爲是使用任何可能的,但我需要確保給定的套接字只嘗試(例如)局域網連接,如果wifi和LAN都可用。設置套接字的本地端點
我正在使用C#和.NET 2.0。
乾杯
Socket.Bind(EndPoint localEP)
方法是你的朋友。有關詳細信息,請參閱MSDN上的here。
要獲得所有本地適配器及其類型看System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()
可以嘗試使用bind()函數? 也許這會做的伎倆。
在MSDN上我發現:
(http://msdn.microsoft.com/en-us/library/ms737550(VS.85).aspx)
備註
需要上 未連接套接字之前隨後 調用監聽功能的綁定功能。它通常用於綁定到面向連接(流)或 無連接(數據報)套接字的 。 綁定函數也可用於將 綁定到原始套接字(套接字是通過調用套接字函數 創建的,套接字類型參數設置爲 SOCK_RAW)創建的套接字爲 。 綁定功能也 上的未連接的套接字 被用於後續調用 之前連接,ConnectEx,WSAConnect, WSAConnectByList,或WSAConnectByName 函數之前發送操作。
當有來電 到socket函數創建一個插座,它在一個 命名空間(地址族)的存在,但它沒有 分配給它的名字。 使用綁定 函數通過將 本地名稱分配給未命名的套接字來建立套接字的本地 關聯。
名稱由使用互聯網地址族三個部分組成,當 :本 地址族。主機地址。標識 應用程序的端口號 。
bind()的是看正確的方法,但OP是要求C#。 – 2009-10-02 11:57:20
對於其他人的參考,我是因爲我用的是UdpClient類使用綁定有問題,並訪問其內部插槽(通過UdpClient.Client)無論我如何嘗試綁定,它都會拋出SocketException。我workaround依賴於創建和第一綁定的插座,然後將其分配到UdpClient實例:
using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
{
var endPoint = new IPEndPoint(ip, port);
socket.Bind(endPoint);
using (var client = new UdpClient() {Client = socket})
{
var destinationIP = IPAddress.Broadcast;
client.Connect(destinationIP, port);
client.Send(bytes, bytes.Length);
}
}
乾杯,就是這樣做的。 – Kazar 2009-10-02 15:24:42
這應該是System.Net.NetworkInformation。NetworkInterface.GetAllNetworkInterfaces()。 – 2009-11-02 02:07:15