2009-01-26 100 views
3

我希望写一个Windows应用程序,它做一些事情,当我成为从互联网上断开。我想编写一个非常简单的C#/ Delphi应用程序,看看我还在连接的简单调查,每20秒。如何判断是否连接到互联网

如果我要查询我真的很想比试图从网上下载一个网页,其他的解决方案。我不能认为下载尝试失败意味着“不在线”,因为可能有其他应用程序正在消耗互联网带宽。另外,我确定不断连接/从某个特定站点下载会阻止我的IP。

我敢肯定有一个的方式来告诉你,如果你在线没有下载/连接到远程服务器,但我不知道如何。

回答

10

要注意的是连接到互联网并没有真正意味着什么:如果你正在连接到ISP,但骨干已关闭,或者你要访问的网站是在最近去了网格状的国家?建立联系并不意味着你可以做你想做的事。
无论如何,前面所说,你可以使用InternetGetConnectedState API来测试你是否有一个有效的网络连接配置。
作为一个例子,下面的例程正确告诉我我有一个局域网连接,但未能检测到我的ZoneAlarm防火墙设置为阻止“所有Internet活动”,这意味着您有效地丢失了所有Internet连接。

Delphi的例程:

procedure IsConnected; 
var 
    dwFlags: DWORD; 
begin 
    if InternetGetConnectedState(@dwFlags, 0) then 
    begin 
    if (dwFlags and INTERNET_CONNECTION_MODEM) = INTERNET_CONNECTION_MODEM then 
     ShowMessage('Modem Connection') 
    else 
    if (dwFlags and INTERNET_CONNECTION_LAN) = INTERNET_CONNECTION_LAN then 
     ShowMessage('LAN Connection') 
    else 
    if (dwFlags and INTERNET_CONNECTION_PROXY) = INTERNET_CONNECTION_PROXY then 
     ShowMessage('Connection thru Proxy') 
    else 
    if (dwFlags and INTERNET_CONNECTION_OFFLINE) = INTERNET_CONNECTION_OFFLINE then 
     ShowMessage('Local system in offline mode') 
    else 
    if (dwFlags and INTERNET_CONNECTION_CONFIGURED) = INTERNET_CONNECTION_CONFIGURED then 
     ShowMessage('Valid connection exists, but might or might not be connected') 
    end 
    else 
    ShowMessage('Not Connected. Try to connect and risk of being prompted to dial into another Internet Service Provider.'); 
end; 
+0

哇,我做了双重考虑,当我看到这个答案多少支持了。我不确定这是否适用于我的情况,但不。基本上我的路由器保持断开连接,如果断开连接,我想使用X10命令将其关闭并重新打开。 – CodeAndCats 2009-01-26 21:41:55