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 测试。具体方法此处不再赘述。