2011-07-23 86 views
5

我需要從DnsEndPoint獲取給定主機名的IP地址,並將其轉換爲IPEndPoint。我會如何去做這件事? WP7缺少一個Dns.GetHostEntry函數,那麼有沒有辦法在不創建Socket的情況下執行此操作,向主機發送數據,然後從主機接收ping並讀取RemoteEndPoint屬性以獲取主機的IP地址?WP7芒果 - 如何獲得給定主機名的IP地址

回答

5

嘗試在Microsoft.Phone.Net.NetworkInformation命名空間中使用DeviceNetworkInformation.ResolveHostNameAsync,像這樣:

public void DnsLookup(string hostname) 
{ 
    var endpoint = new DnsEndPoint(hostname, 0); 
    DeviceNetworkInformation.ResolveHostNameAsync(endpoint, OnNameResolved, null); 
} 

private void OnNameResolved(NameResolutionResult result) 
{ 
    IPEndPoint[] endpoints = result.IPEndPoints; 
    // Do something with your endpoints 
} 
2

有沒有辦法做到這一點內置於框架。你可以使用一個套接字來證明主機支持ping。它將取決於您正在運行的網絡(我假設您無法控制此)以及應用程序的確切要求。

讓您的應用程序使用IP地址工作可能會更容易,如果您擁有的只是IP地址,則不需要主機名。

+0

的問題是;我正在處理經常變化的動態分配的IP地址,並通過No-IP更新它們,但我想;再次與微軟,最好的解決方案有時是沒有解決辦法。 – IDWMaster

+0

我結束了爲主機IP查找設置UDP服務。暫時不是真正的「解決方案」,但它可能是目前最好的解決方法。 – IDWMaster

2

我想我正在處理同樣的問題。我也有一個動態的IP使用No-ip更新DNS。

對於我所知道的System.Net.Dns在此版本的Windows Phone中不可用。 也許在下一個版本。

http://msdn.microsoft.com/en-us/library/system.net.dns.aspx

在我的應用程序的開始,我要去創建一個Web服務調用主機(在它的網絡服務器)要求的ip地址。我想我會在此期間解決問題。

這可能是WCF服務

[ServiceContract] 
public interface IService1 
{ 
[OperationContract] 
string GetIpAddress(string value); 
} 

public class Service1 : IService1 
{ 
    public string GetIpAddress() 
    { 
    // Add the proper error handling and collection matching of course 
     IPAddress s = Dns.GetHostAddresses("www.mysite.com")[0]; 
     return s.ToString(); 
    } 
    } 

如果你們找到一個直接的方法,請讓我知道