在C#开发中,检查网络连接状态是一项常见需求,比如程序启动时需要判断能否访问服务器,或者在网络断开时给出提示。下面介绍几种实用的检查方法。

使用NetworkInformation获取网络适配器状态
System.Net.NetworkInformation命名空间下的NetworkInterface类可以列出所有网卡,并判断是否有网卡处于已连接且启用的状态。这种方式不依赖外部网络,适合判断本机是否接了网线或连了WiFi。
using System;
using System.Net.NetworkInformation;
public class NetCheck
{
// 判断是否存在已连接的网络适配器
public static bool IsNetworkAvailable()
{
foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
{
// 跳过 Loopback 和 已禁用的网卡
if (ni.NetworkInterfaceType == NetworkInterfaceType.Loopback)
continue;
if (ni.OperationalStatus == OperationalStatus.Up)
return true;
}
return false;
}
}
调用Windows API检测互联网连接
如果希望判断系统是否被认为已连接到互联网,可以调用wininet.dll中的InternetGetConnectedState方法。它返回系统级的联网标记,不保证一定能访问具体站点。
using System;
using System.Runtime.InteropServices;
public class WinInetCheck
{
[DllImport("wininet.dll")]
private static extern bool InternetGetConnectedState(out int lpdwFlags, int dwReserved);
public static bool HasInternet()
{
int flags;
return InternetGetConnectedState(out flags, 0);
}
}
通过TCP连接验证外网可达
最可靠的方式是尝试与已知服务器建立TCP连接。以下示例使用TcpClient连接常见DNS端口,能真实反映能否访问外网。
using System;
using System.Net.Sockets;
public class TcpCheck
{
public static bool CanConnect(string host, int port)
{
try
{
using (TcpClient client = new TcpClient())
{
client.Connect(host, port);
return client.Connected;
}
}
catch
{
return false;
}
}
}
方法对比
| 方法 | 依赖 | 准确度 |
|---|---|---|
| NetworkInterface | 本机网卡 | 仅知网卡连通 |
| InternetGetConnectedState | 系统状态 | 中等 |
| TcpClient连接 | 外部服务器 | 高 |
实际项目中,建议组合使用:先用NetworkInterface判断网卡,再用TCP连接验证外网,这样既快又准。
C#网络连接检测NetworkInformation修改时间:2026-07-28 07:06:18