如何确定网络接口是否连接到互联网(即计算机是否在线)

4

我需要一种编程方式来确定网络的可用性。

目前我使用Ping来不断地ping一些互联网站。

但是在Windows 7中,它似乎以其他方式确定网络的可用性。如果计算机在线,系统托盘中的网络接口图标上会有地球图标。

问题是:是否有任何标准的Win32方法来检查在线状态,包括事件或其他方法,并且如果有,如何从C#中使用它?


你打算如何处理这些信息?由于互联网连接随时可能中断,你必须进行防御性编程。 - Damien_The_Unbeliever
嗯,我有一段重新启用局域网接口的代码。 - skaeff
它通过WMI禁用LAN接口,然后再次启用 - 当供应商端出现问题时,它会有所帮助。我还计划设置WiMax或GSM调制解调器,因为对于我的应用程序保持连接非常关键 :) - skaeff
2个回答

4

我相信这样做是可行的,尽管你的问题似乎是一个重复的问题:

using System;
using System.Runtime;
using System.Runtime.InteropServices;

public class InternetCS
{
    //Creating the extern function...
    [DllImport("wininet.dll")]
    private extern static bool InternetGetConnectedState( out int Description, int ReservedValue );

    //Creating a function that uses the API function...
    public static bool IsConnectedToInternet( )
    {
        int Desc ;
        return InternetGetConnectedState( out Desc, 0 ) ;
    }
}

在这里找到:

使用C#检查互联网连接是否可用


2

'连接到互联网'除了在调制解调器的情况下没有任何实际意义。测试任何资源是否可用的最佳方法是使用它。无论如何,您都必须在那一点上处理故障,没有必要编写所有内容两次。


好的,这已经完成了。每3秒钟我会向一个公共知名主机发送ping请求,如果至少连续10个周期失败 - 我会重新启动网络接口。 - skaeff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接