在C#中检查网络状态

Bri*_*ark 18 .net c# network-programming

如何检查我是否有开放的网络连接,并且可以联系c#中的特定IP地址?我在VB.Net中看到了一些例子,但它们都使用了'My'结构.谢谢.

Yon*_*ona 38

如果您只是想检查网络是否已启动,请使用:

bool networkUp
    = System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable();
Run Code Online (Sandbox Code Playgroud)

要检查特定接口的状态(或其他信息),请使用:

NetworkInterface[] networkCards
    = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces();
Run Code Online (Sandbox Code Playgroud)

要检查远程计算机的状态,您必须连接到该计算机(请参阅其他答案)


小智 13

如果要监视状态的更改,请使用以下System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged事件:

NetworkChange.NetworkAvailabilityChanged 
    += new NetworkAvailabilityChangedEventHandler(NetworkChange_NetworkAvailabilityChanged);
_isNetworkOnline = NetworkInterface.GetIsNetworkAvailable();


// ...
void NetworkChange_NetworkAvailabilityChanged(object sender, NetworkAvailabilityEventArgs e)
{
    _isNetworkOnline  = e.IsAvailable;
}
Run Code Online (Sandbox Code Playgroud)


Pat*_*ins 5

第一个建议(IP连接)

您可以尝试使用以下内容连接到IP地址:

IPEndPoint ipep = new IPEndPoint(Ipaddress.Parse("IP TO CHECK"), YOUR_PORT_INTEGER);
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
server.Connect(ipep);
Run Code Online (Sandbox Code Playgroud)

我建议你查看"聊天"程序的代码.这些程序操纵了很多IP连接,可以让您很好地了解如何检查IP是否可用.

第二个建议(平)

你可以尝试ping.这是一个很好的教程.你只需要这样做:

Ping netMon = new Ping();
PingResponse response = netMon.PingHost(hostname, 4);
if (response != null)
{
    ProcessResponse(response);
}
Run Code Online (Sandbox Code Playgroud)

  • Ping数据包(ICMP回应请求)通常被防火墙阻止,因此使用此方法测试防火墙另一侧服务器的可用性将在这种情况下失败. (3认同)