如何获取服务器(不是网络服务器)的 IP 地址,而是在 Xamarin.Forms 中的 wifi 模块上创建的 TCP 服务器

How do you get the IP address of a server (not a webserver) but a TCP server created on a wifi module in Xamarin.Forms

我需要获取 Wi-Fi 模块的 IP 地址,运行 TCP 服务器。应用程序将打开WiFi连接设置页面,允许用户连接到Wi-Fi模块创建的网络(需要输入密码)- 见附图。服务器(Wi-FI 模块)IP 地址是 172.1.4.155(例如),但是当我尝试使用 GetLocalIPAddress()[=26 获取 Xamarin.Forms 中的 IP 地址时=](附在下面),地址它returns是设备的本地IP地址(Phone)- 172.1.4.55(例如)。我需要能够以编程方式获取 IP 地址,而无需用户在应用程序中输入。

有没有办法获取(外部)非设备特定 IP 地址的 IP 地址?我假设 phone 返回的 IP 地址是 DHCP 分配的 IP 地址。我需要获取服务器 IP 地址,因为在 phone 和 WiFi 模块之间建立 TCP 套接字连接是必不可少的。几天来我一直在尝试寻找解决方案,但没有成功,所以任何 help/suggestions 或示例将不胜感激。

下面的代码是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";
    }

如何读取 XAMARIN 表单中的 IP 地址,我已经在 IOS 和 Android 项目中创建了 DependencyServices 并获得了正确的 IP 地址。下面是获取 IP 地址的代码。

在PCL项目中

public interface IIPAddressManager
    {
        String GetIPAddress();
    }

在IOS项目中

[assembly: Dependency(typeof(YourAppNamespace.iOSUnified.iOS.DependencyServices.IPAddressManager))]

namespace YourAppNamespace.iOSUnified.iOS.DependencyServices
{
    class IPAddressManager : IIPAddressManager
    {
        public string GetIPAddress()
        {
            String ipAddress = "";

            foreach (var netInterface in NetworkInterface.GetAllNetworkInterfaces())
            {
                if (netInterface.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 ||
                    netInterface.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
                {
                    foreach (var addrInfo in netInterface.GetIPProperties().UnicastAddresses)
                    {
                        if (addrInfo.Address.AddressFamily == AddressFamily.InterNetwork)
                        {
                            ipAddress = addrInfo.Address.ToString();

                        }
                    }
                }
            }

            return ipAddress;
        }
    }
}

在 Android 项目中。

[assembly: Dependency(typeof(YourAppNamespace.Android.Android.DependencyServices.IPAddressManager))]

namespace YourAppNamespace.Android.Android.DependencyServices
{
    class IPAddressManager : IIPAddressManager
    {
        public string GetIPAddress()
        {
            IPAddress[] adresses = Dns.GetHostAddresses(Dns.GetHostName());

            if (adresses !=null && adresses[0] != null)
            {
                return adresses[0].ToString();
            }
            else
            {
                return null;
            }
        }
    }
}

然后在UI项目中调用一个DependencyServices。

string ipaddress = DependencyService.Get<IIPAddressManager>().GetIPAddress