设置套接字的本地端点

我需要创建一个连接到服务器进程的套接字,但必须限制为使用指定的本地适配器。 默认行为是尽可能使用它,但我需要确保给定套接字仅尝试(例如)LAN连接,如果wifi和LAN都可用。

我正在使用C#和.NET 2.0。

干杯

Socket.Bind(EndPoint localEP)方法是你的朋友。 在MSDN上查看详细信息。

要获取所有本地适配器及其类型,请查看System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()

作为其他人的参考,我在使用Bind时遇到了问题,因为我正在使用UdpClient类并访问其内部Socket(通过UdpClient.Client),无论我如何尝试绑定,它都会抛出SocketException。 我的解决方法依赖于首先创建和绑定Socket,然后将其分配给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); } } 

你可以尝试使用bind()函数吗? 也许这会成功。

在msdn上我发现:

http://msdn.microsoft.com/en-us/library/ms737550(VS.85).aspx )

备注

在后续调用listen函数之前,在未连接的套接字上需要bind函数。 它通常用于绑定到面向连接(流)或无连接(数据报)的套接字。 绑定函数也可用于绑定到原始套接字(套接字是通过调用socket函数创建的,类型参数设置为SOCK_RAW)。 在发送操作之前对connect ,ConnectEx,WSAConnect,WSAConnectByList或WSAConnectByName函数的后续调用之前,绑定函数也可以在未连接的套接字上使用。

当通过调用套接字函数创建套接字时,它存在于命名空间(地址族)中,但没有为其分配名称。 使用bind函数通过为未命名的套接字分配本地名称来建立套接字的本地关联。

使用Internet地址系列时,名称由三部分组成:地址系列。 主机地址。 标识应用程序的端口号。