如何判断是否连接到互联网

3

我希望编写一个Windows应用程序,当我与互联网断开连接时执行某些操作。我想编写一个非常简单的C# / Delphi应用程序,每20秒轮询一次以查看我是否仍然连接。

如果必须轮询,我真的很希望有其他解决方案,而不是尝试从网络下载网页。我不能假设下载失败意味着“离线”,因为可能有其他应用程序占用了互联网带宽。另外,我相信不断地连接/下载来自特定网站的内容会导致我的IP被阻止。

我相信有方法可以在不下载/连接到远程服务器的情况下判断您是否在线,但我不确定如何实现。

3个回答

10

请注意,仅仅连接到互联网并不意味着什么:如果您连接到您的ISP,但是主干线路出现故障,或者您想要访问的所有站点都在像最近这样的国家中断了网络连接怎么办? 有一个连接并不意味着您可以做任何想做的事情。
无论如何,如前所述,您可以使用InternetGetConnectedState API来测试是否已配置有效的Internet连接。
例如,下面的例程正确告诉我我有一个局域网连接,但未能检测到我设置为阻止“所有Internet活动”的ZoneAlarm防火墙,这意味着您实际上失去了所有的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;

哇,当我看到这个答案得到了多少支持时,我真的感到震惊。但我不确定它是否适用于我的情况。基本上,我的路由器总是断开连接,如果发生断开连接,我希望使用X10命令将其关闭然后再次打开。 - CodeAndCats

3

2

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