2010-01-20 36 views
10

Tôi đang sử dụng dll của bên thứ ba yêu cầu “IPEndPoint”. Khi người dùng có thể nhập Địa chỉ IP hoặc Tên máy chủ, tôi cần phải chuyển đổi tên Máy chủ thành địa chỉ IP trước khi tôi có thể tạo IPEndPoint. Có chức năng để làm điều này trong. Net hoặc tôi sẽ phải viết mã tra cứu DNS của riêng tôi?Tạo IPEndPoint từ tên máy chủ

Trả lời

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

Làm thế nào để bạn biết 'địa chỉ [0] 'là địa chỉ phù hợp nhất trong danh sách các địa chỉ trả lại? – dtb

+0

Bạn không biết nhưng tỷ lệ cược rất mỏng mà nó quan trọng. – ChaosPandion

+7

nó sẽ là ip đầu tiên trong danh sách như máy chủ DNS vòng robin sẽ phục vụ nó theo thứ tự khác nhau mỗi khi mong đợi khách hàng sử dụng đầu tiên để sử dụng đầu tiên trong danh sách;). –

0

Bạn có thể sử dụng một cái gì đó như thế này:

var addresses = Dns.GetHostAddresses(uri); 
Debug.Assert(addresses.Length > 0); 
var endPoint = new IPEndPoint(addresses[0], port); 
Các vấn đề liên quan