我想知道如何检查域是否在 c# 中有效?
我做的
IPAddress[] addresslist = Dns.GetHostAddresses("domain");
它返回 IP,这很好,但我想检查它是否是实时的(如 ping)?
我只需要知道 PC 是否与服务器在同一个网络中,所以我有一个功能可以检查,但功能基于上面的代码,它返回 IP,但我注意到它是基于缓存的 DNS!
我想再增加一个检查功能,看看服务器是否在线!
干杯
我想知道如何检查域是否在 c# 中有效?
我做的
IPAddress[] addresslist = Dns.GetHostAddresses("domain");
它返回 IP,这很好,但我想检查它是否是实时的(如 ping)?
我只需要知道 PC 是否与服务器在同一个网络中,所以我有一个功能可以检查,但功能基于上面的代码,它返回 IP,但我注意到它是基于缓存的 DNS!
我想再增加一个检查功能,看看服务器是否在线!
干杯
System.Net.NetworkInformation.OperationalStatus属性允许您检测您的网络接口是否已连接(启动)。
NetworkInterface.GetIPProperties方法将为您提供IP 信息。
您可以使用它来检查计算机是否在局域网上,然后执行您需要的操作 - 如 ping - 如果已连接。
您可以使用该Ping.Send(IPAddress)
方法。
编辑:或者直接采用主机名的重载之一。
Ping.Send(string)
来自 MSDN 的示例:
Ping pingSender = new Ping ();
PingReply reply = pingSender.Send ("www.contoso.com");
if (reply.Status == IPStatus.Success)
{
Console.WriteLine ("Address: {0}", reply.Address.ToString ());
Console.WriteLine ("RoundTrip time: {0}", reply.RoundtripTime);
Console.WriteLine ("Time to live: {0}", reply.Options.Ttl);
Console.WriteLine ("Don't fragment: {0}", reply.Options.DontFragment);
Console.WriteLine ("Buffer size: {0}", reply.Buffer.Length);
}
else
{
Console.WriteLine (reply.Status);
}
如果您需要使用远程系统执行任何类型的任务,那么再多的预检查都无法确保您能够执行任务 - 网络和主机不是 100% 可靠的,并且在您检查期间是正确的在尝试实际任务时,或在执行任务的整个过程中,操作可能不再正确。
唯一明智的做法是尝试您需要执行的任务,并以安全的方式处理错误、超时等。这可能是让用户知道失败,或者重试(每次尝试之间的延迟可能会增加),或者只是在某处记录错误。