【问题标题】:Retrieve IP address of device检索设备的 IP 地址
【发布时间】:2014-03-04 02:43:40
【问题描述】:

我正在使用 Xamarin.Android 并编写了以下代码:

public TextView text;
text = FindViewById<TextView>(Resource.Id.viewIP);
foreach (IPAddress adress in Dns.GetHostAddresses(Dns.GetHostName()))
{
    text.Text = "IP Adress: " + adress;
}

但是,当我打开应用程序时,它会立即关闭。我是否使用了正确的方法来获取设备的 IP 地址?

【问题讨论】:

    标签: c# xamarin.android xamarin ip-address


    【解决方案1】:

    来自Xamarin forums

    Java.Util.IEnumeration networkInterfaces = NetworkInterface.NetworkInterfaces;
    
    while(networkInterfaces.HasMoreElements)
    {
      Java.Net.NetworkInterface netInterface = 
                                (Java.Net.NetworkInterface)networkInterfaces.NextElement();
      Console.WriteLine(netInterface.ToString());
    }
    

    【讨论】:

      【解决方案2】:

      添加到主文件:

      <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
      <uses-permission android:name="android.permission.INTERNET" />
      

      获取本地ip:

      public static string GetLocalIPAddress()
      {
          var host = Dns.GetHostEntry(Dns.GetHostName());
          foreach (var ip in host.AddressList)
          {
              if (ip.AddressFamily == AddressFamily.InterNetwork)
              {
                  return ip.ToString();
              }
          }
          throw new Exception("Local IP Address Not Found!");
      }
      

      看到这个答案:https://stackoverflow.com/a/6803109/4349342

      【讨论】:

      • 你真的想因此抛出异常吗?提示 - 你不知道。
      【解决方案3】:

      对我来说,这在 PCL Xamarin 中有效:

      public static string GetIPAddress()
      {
          var AllNetworkInterfaces = Collections.List(Java.Net.NetworkInterface.NetworkInterfaces);
          var IPAddres = "";
          foreach (var interfaces in AllNetworkInterfaces)
          {
              if (!(interfaces as Java.Net.NetworkInterface).Name.Contains("eth0")) continue;
      
              var AddressInterface = (interfaces as Java.Net.NetworkInterface).InterfaceAddresses;
              foreach (var AInterface in AddressInterface)
              {
                  if(AInterface.Broadcast != null)
                      IPAddres = AInterface.Address.HostAddress;
              }
          }
              return IPAddres;
      }
      

      【讨论】:

        【解决方案4】:

        我在这个问题上看到的所有答案都只在我的家庭网络 (198.162.#.#) 上获得了我设备的内部 IP 地址。所以我采取了一种稍微不同的方法,更直接地询问互联网。 ipify.org 有一个漂亮而简单的端点来获取你的 IP 地址,可以在你的共享代码中执行。比如……

        var client = new HttpClient();
        var response = await client.GetAsync("https://api.ipify.org/?format=json");
        var resultString = await response.Content.ReadAsStringAsync();
        
        var result = JsonConvert.DeserializeObject<IpResult>(resultString);
        
        var yourIp = result.Ip;
        

        其中“IpResult”是一个带有名为“Ip”的单个字符串属性的 POCO(除了此代码之外,您还需要创建它。)

        【讨论】:

        • 如果链接在某个时候断开怎么办?有没有办法在不点击任何链接的情况下获取公共 IP 地址?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-13
        • 1970-01-01
        • 1970-01-01
        • 2013-06-29
        相关资源
        最近更新 更多