如何获取服务器(不是网络服务器)的 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
我需要获取 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