WP7 Mango - How to get an IP address for a given h

2019-06-21 23:44发布

问题:

I need to get an IP address for a given hostname from a DnsEndPoint, and convert it to an IPEndPoint. How would I go about doing this? WP7 lacks a Dns.GetHostEntry function, so is there any way to do this without creating a Socket, sending data to the host, then receiving a ping from the host and reading the RemoteEndPoint property to get the IP address of the host?

回答1:

Try using DeviceNetworkInformation.ResolveHostNameAsync in the Microsoft.Phone.Net.NetworkInformation namespace, like this:

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:

There is no way to do this built into the framework. You could use a socket assumming that the host supports ping. It will depend on the network you are running in (I'd assume you can't control this) and the exact requirements of the application.

It may be easier to get your app to work with IP addresses and not require a hostname if all you have is an IP address.



回答3:

I think Im dealing with the same problem. I also have a dynamic IP updating the dns with No-ip.

For what I know the System.Net.Dns is not available in this version of Windows Phone. Maybe in next releases.

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

At the start of my app Im going to create a web service call to the host (to the webserver in it) asking for the IPAddress. I think I'll solve the problem in the meantime.

This could be the WCF service

[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();
    }
  }

If you guys find a direct approach please let me know