有没有办法找出哪个网络地址是活动的



我有一个方法,可以使用xamarin形式的C#在android手机上循环浏览网络地址,有人能告诉我如何查看哪个设备是活动设备吗?

我之所以这么问,是因为在我测试过的一些安卓手机上,会有不止一个适配器!

这是我的代码示例,它将列出设备。。。

public static void NetworkAdresses()
{
int i = 0;
string hostname = Dns.GetHostName();
IPHostEntry host = Dns.GetHostByName(hostname);
Adresses.Clear();
foreach (IPAddress address in host.AddressList)
{
Adresses.Add(new Adress 
{ 
id = i,
address = $"{address}"
});
i += 1;
}
}

您想确定应用程序是否可以访问具有给定IP地址的服务器吗?如果是这样,您可以检查以下代码。

IPAddress IP;
if(IPAddress.TryParse("127.0.0.1",out IP)){
Socket s = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
try{   
s.Connect(IPs[0], port);
}
catch(Exception ex){
// something went wrong
}
}

所以我设法解决了我遇到的问题,"可能有一种更干净的方法可以做到这一点,我意识到如果用户有多个活动硬件设备,如蓝牙或数据,这可能不会给出所需的结果",但目前在一些设备上测试后,它给了我所需的效果。

这是我的代码,如果有人能改进这一点,或者给出一个解决方案,如果用户有蓝牙和/或数据设备激活以及无线,欢迎你给出我将如何将其编码到我的方法中的示例。

// create a host instance of the users phone
public static IPHostEntry ihe = Dns.GetHostByName(Dns.GetHostName());
public static string GetCurrentDeviceIp()
{
int i = 0;
string IP = "";
foreach (IPAddress address in ihe.AddressList)
{
if (IsReachable($"{address}"))
{
IP = $"{address}";
break;
}
i += 1;
}
return IP; 
}

// Check if the current IP is online
public static bool IsReachable(string host)
{
try
{
bool HasConnectivity = false;
Ping pingSender = new Ping();
PingOptions options = new PingOptions
{
// Use the default Ttl value which is 128,
// but change the fragmentation behavior.
DontFragment = true
};
// Create a buffer of 32 bytes of data to be transmitted.
string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
byte[] buffer = Encoding.ASCII.GetBytes(data);
int timeout = 120;
PingReply reply = pingSender.Send(host, timeout, buffer, options);
if (reply.Status == IPStatus.Success) HasConnectivity = true;
return HasConnectivity;
}
catch (Exception ex)
{
return false;
}
}

最新更新