2010-01-20 9 views
10

Estoy usando un dll de un tercero que requiere un "IPEndPoint". Como el usuario puede ingresar una dirección IP o un nombre de host, necesito convertir un nombre de host en una dirección IP antes de poder crear un IPEndPoint. ¿Hay alguna función para hacer esto en .net o tendré que escribir mi propio código de búsqueda de DNS?Creación de un IPEndPoint a partir de un nombre de host

Respuesta

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

¿Cómo sabe 'direcciones [0] 'es la dirección más adecuada en la lista de direcciones devueltas? – dtb

+0

No lo sabes, pero las probabilidades son muy escasas de que importe. – ChaosPandion

+7

debería ser la primera dirección IP de la lista, ya que los servidores DNS lo atenderán en un orden diferente cada vez esperando que los clientes utilicen el primero así que use el primero en la lista;). –

0

se puede usar algo como esto:

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