设置套接字的本地端点

时间:2009-10-02 10:38:27

标签: c# .net sockets

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

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

干杯

3 个答案:

答案 0 :(得分:14)

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

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

答案 1 :(得分:6)

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

答案 2 :(得分:0)

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

在msdn上我发现:

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

  

说明

     

需要绑定功能   后续之前未连接的套接字   调用listen函数。它是   通常用于绑定到任何一个   面向连接(流)或   无连接(数据报)套接字。该   绑定函数也可用于绑定   到一个原始套接字(套接字是   通过调用套接字函数创建   将type参数设置为   SOCK_RAW)。 绑定功能也可以   用于未连接的套接字   之后的电话会议   连接,ConnectEx,WSAConnect,   WSAConnectByList或WSAConnectByName   发送操作前的功能。

     

通过调用创建套接字时   对于socket函数,它存在于一个   命名空间(地址族),但它有   没有分配给它的名字。 使用绑定   建立当地的功能   通过分配套接字的关联   未命名套接字的本地名称。

     

名称由三部分组成   使用互联网地址系列:   地址家庭。主机地址。一个港口   标识的数字   应用