TOC
使用 `My` 命名空间
在 Visual Basic.NET 中,可以使用My.Computer.Network.IsAvailable 来获取网络是否已经连接。此函数的定义如下所示:
'''**********************************************************************
''';IsAvailable
''' <summary>
''' Indicates whether or not the local machine is connected to an IP network.
''' </summary>
''' <value>True if connected, otherwise False</value>
''' <remarks></remarks>
Public ReadOnly Property IsAvailable() As Boolean
Get
Return NetInfoAlias.NetworkInterface.GetIsNetworkAvailable()
End Get
End Property
由此引入了C#中获取网络状态的方法。
使用 `NetworkInterface` 类
可以使用`System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable`静态函数来获取是否具有可用的网络连接。
此函数在MSDN原文中描述如下:
如果有任何网络接口标记为“up”而且不是环回或隧道接口,则认为有可用的网络连接。
使用`InternetGetConnectedState`函数
在Wininet.dll中公开了一个函数,用于获取当前的网络连接状态。其具体用法请参阅InternetGetConnectedState function。函数的定义如下:
BOOL InternetGetConnectedState( _Out_ LPDWORD lpdwFlags, _In_ DWORD dwReserved );
其返回值如果非零,则表示存在活动的网络连接。如果使用C#导入此函数,则可以编写如下的控制台程序,用以检测网络状态:
using System;
using System.Runtime.InteropServices;
namespace ConsoleApplication2
{
class Program
{
[Flags]
public enum INTERNET_CONNECTION : int
{
MODEM = 0x01,
LAN = 0x02,
PROXY = 0x04,
MODEM_BUSY = 0x08,
RAS_INSTALLED = 0x10,
OFFLINE = 0x20,
CONFIGURED = 0x40,
}
[DllImport("winInet")]
private static extern bool InternetGetConnectedState(out INTERNET_CONNECTION dwFlag, int dwReserved);
static void Main(string[] args)
{
INTERNET_CONNECTION flag;
if (InternetGetConnectedState(out flag, 0))
Console.WriteLine("网络已经连接:{0}。", flag);
else
Console.WriteLine("网络尚未连接。");
}
}
}
使用 Ping 测试与指定站点的连通性
可以通过 ping 测试与指定站点的连通性来判断是否联网。使用此方法的优点在于,如果测试结果表明网络是连通的,那么网络肯定是连通的。
可以使用 `System.Net.NetworkInformation.Ping` 类进行 ping 测试。具体方法此处不再赘述。
