【发布时间】:2018-08-02 19:18:01
【问题描述】:
我需要获取运行 TCP 服务器的 Wi-Fi 模块的 IP 地址。该应用程序将打开 WiFi 连接设置页面,以允许用户连接到 Wi-Fi 模块创建的网络(需要输入密码)-见附图。服务器(Wi-FI 模块)IP 地址是 172.1.4.155(例如),但是当我尝试使用 GetLocalIPAddress() 在 Xamarin.Forms 中获取 IP 地址时(附在下面),它返回的地址是设备(电话)的本地IP地址 - 172.1.4.55(例如)。我需要能够以编程方式获取 IP 地址,而无需用户在应用程序中输入。
有没有办法获取(外部)非设备特定 IP 地址的 IP 地址?我假设返回的电话 IP 地址是 DHCP 分配的 IP 地址。我需要获取服务器 IP 地址,因为必须在手机和 WiFi 模块之间建立 TCP 套接字连接。几天来,我一直在尝试寻找没有任何成功的解决方案,因此我们将不胜感激任何帮助/建议或示例。
下面的代码是GetLocalIPAddress()函数获取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();
}
//return "";
}
//throw new Exception("Local IP Address Not Found!");
return "None";
}
【问题讨论】:
-
在我看来,如果您假设它是由 DHCP 分配的 IP 地址,这很容易发生竞争。当您对答案进行操作时,您的租约可能已经到期并且(无论出于何种原因)分配了一个新地址,而不是继续使用旧地址。
-
@Damien_The_Unbeliever,这是一个非常有效的观点。有什么办法可以解决这个问题,或者至少让 IP 在重新分配 IP 之前尝试创建与 IP 的套接字连接?
标签: c# xamarin xamarin.forms tcpclient