【问题标题】:Creating an IPEndPoint from a hostname从主机名创建 IPEndPoint
【发布时间】:2010-01-20 13:54:27
【问题描述】:

我正在使用需要“IPEndPoint”的第三方 dll。由于用户可以输入 IP 地址或主机名,因此我需要先将主机名转换为 IP 地址,然后才能创建 IPEndPoint。 .net 中是否有任何功能可以执行此操作,还是我必须编写自己的 DNS 查找代码?

【问题讨论】:

    标签: c# network-programming


    【解决方案1】:

    System.Net.Dns.GetHostAddresses

    public static IPEndPoint GetIPEndPointFromHostName(string hostName, int port, bool throwIfMoreThanOneIP)
    {
        var addresses = System.Net.Dns.GetHostAddresses(hostName);
        if (addresses.Length == 0)
        {
            throw new ArgumentException(
                "Unable to retrieve address from specified host name.", 
                "hostName"
            );
        }
        else if (throwIfMoreThanOneIP && addresses.Length > 1)
        {
            throw new ArgumentException(
                "There is more that one IP address to the specified host.", 
                "hostName"
            );
        }
        return new IPEndPoint(addresses[0], port); // Port gets validated here.
    }
    

    【讨论】:

    • 你怎么知道addresses[0]是返回地址列表中最合适的地址?
    • 你不知道,但重要的可能性很小。
    • 它应该是列表中的第一个 ip,因为轮询 DNS 服务器每次期望客户端使用第一个时都会以不同的顺序为其提供服务,因此请使用列表中的第一个 ;)。跨度>
    【解决方案2】:

    你可以这样使用:

    var addresses = Dns.GetHostAddresses(uri);
    Debug.Assert(addresses.Length > 0);
    var endPoint = new IPEndPoint(addresses[0], port);
    

    【讨论】:

      猜你喜欢
      • 2011-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-28
      相关资源
      最近更新 更多