我需要从DnsEndPoint获取给定主机名的IP地址,并将其转换为IPEndPoint。我该怎么做呢? WP7缺少Dns.GetHostEntry函数,所以有没有办法在不创建Socket的情况下执行此操作,向主机发送数据,然后从主机接收ping并读取RemoteEndPoint属性以获取主机的IP地址?
答案 0 :(得分:5)
尝试在DeviceNetworkInformation.ResolveHostNameAsync
命名空间中使用Microsoft.Phone.Net.NetworkInformation
,如下所示:
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
}
答案 1 :(得分:2)
没有办法在框架中构建这个。您可以使用套接字来确定主机支持ping。它取决于您运行的网络(我假设您无法控制它)以及应用程序的确切要求。
可能更容易让您的应用使用IP地址,如果您拥有的只是IP地址,则不需要主机名。
答案 2 :(得分:2)
我认为我正在处理同样的问题。我还有一个动态IP用No-ip更新dns。
据我所知,System.Net.Dns在此版本的Windows Phone中不可用。 也许在下一个版本中。
http://msdn.microsoft.com/en-us/library/system.net.dns.aspx
在我的应用程序开始时,我将创建一个Web服务调用主机(到其中的Web服务器),要求IPAddress。我想我会在此期间解决问题。
这可能是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();
}
}
如果你们找到直接的方法,请告诉我