我需要找到连接到本地网络的 IP 地址。我看到可以使用 System.Net.NetworkInformation
类来完成。我按如下方式应用它,但这种方法比我预期的要慢得多。
private async void FindIp()
{
List<string> FindIpList = new List<string>();
for (int i = 0; i < 255; i++)
{
Ping ping = new Ping();
string Ip = "192.168.1." + i;
var replay = await ping.SendPingAsync(Ip, 200);
Console.WriteLine(replay.Status.ToString());
if (replay.Status.ToString() == "Success")
{
FindIpList.Add(Ip);
}
}
}
当在计算机的命令行(CMD)中输入 arp -a 时,它会以毫秒为单位查找所有 ip 地址。听起来像是获取命令行输出并解析它的一种非常糟糕的方法。有没有更有效、更快捷的方法?
我已应用@KlausGütter 建议的示例代码,但出现 'System.InvalidOperationException' in System.dll
错误。任务为空。
代码:
List<string> FindIpList = new List<string>();
private void button_Click(object sender, RoutedEventArgs e)
{
FindIpList.Add("192.168.1.12");
FindIpList.Add("192.168.1.13");
PingAsync();
}
private async Task<List<PingReply>> PingAsync()
{
Ping pingSender = new Ping();
var tasks = FindIpList.Select(ip => pingSender.SendPingAsync(ip,2000));
var results = await Task.WhenAll(tasks);
return results.ToList();
}