2010-01-20 5 views
10

Ich verwende eine Drittanbieter-DLL, die einen "IPEndPoint" erfordert. Da der Benutzer entweder eine IP-Adresse oder einen Host-Namen eingeben kann, muss ich einen Host-Namen in eine IP-Adresse konvertieren, bevor ich einen IPEndPoint erstellen kann. Gibt es irgendwelche Funktionen, um dies in .net zu tun, oder werde ich meinen eigenen DNS-Lookup-Code schreiben müssen? Erstellen eines IPEndPoint von einem Hostnamen

Antwort

24

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. 
} 
+2

Wie wissen Sie, 'Adressen [0]' ist die am besten geeignete Adresse in der Liste der zurückgegebenen Adressen? – dtb

+0

Sie wissen es nicht, aber die Chancen sind sehr gering, dass es darauf ankommt. – ChaosPandion

+7

sollte es die erste IP-Adresse in der Liste als Round-Robin-DNS-Server werden es in einer anderen Reihenfolge jedes Mal erwartet Clients verwenden die erste, so dass die erste in der Liste;). –

0

können Sie so etwas wie folgt verwenden:

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