2010-03-16 114 views
0

我做了一个快速搜索如何检查互联网是否可用。他们中的大多数人谈论了对wininet.dll进行InterOp调用。优雅/简单的方法来检查互联网是否可用

其中一个答案指向System.Net.NetworkInformation命名空间。探索命名空间,我发现一个类Ping可以用来从代码ping我们的服务器,并检查服务器是否可用。

我想问的是这个解决方案如何与其他解决方案进行比较?

Ping soPing = new Ping(); 
var soPingReply = soPing.Send("www.stackoverflow.com"); 
if (soPingReply.Status != IPStatus.Success) 
{ 
    // SO not available 
} 

回答

1

试试这个:

[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); 
} 
+0

这个解决方案与我给出的解决方案相比如何? – Trainee4Life

+0

它使用标准的win32方法。 问题是,你不需要回答一个问题“互联网可用”是什么意思?“ 如果你有'互联网,但是临时下来怎么办?你必须在这里实现更复杂的逻辑(查看几个网站),或者依靠windows内置工具。 至于我,我宁愿检查我需要的具体网站/服务器的平衡性,但不是整个互联网。这个信息通常更有用(当然,如果你正在构建搜索引擎:)) –

+0

“我确实想要检查客户端网站的连通性,如果存在,然后加载它,否则加载离线页面网络浏览器控制“。 正如您所建议的那样,检查特定的站点/服务器总是一个更好的选择。我应该怎么做呢? – Trainee4Life

1

网络连接无关用ping通一些(随机?)网站的能力。 如果你在防火墙的后面或者目的地是ping(或者响应)很可能在实际流量不存在时被阻塞。

即使该ping能够正常工作,也不能保证在您想要发出实际请求时连接仍然可用。 所以最好只做实际的请求,并确保处理任何可能发生的网络错误。

+0

我其实想要检查客户端网站的连通性。如果存在,则加载它,否则在Web浏览器控件中加载离线页面。 – Trainee4Life

+0

同样的事情。试着加载它。如果失败,则显示脱机页面,如果不是,则显示真实的页面。 – jwenting

0

它多久尝试和平?如果您的应用锁定了30秒,那么这有什么关系?

你有互联网连接但暂时关闭吗?

是互联网已关闭还是SO网站?

如果本地防火墙阻止ping,该怎么办?

+0

IPStatus枚举有相当多的状态字段。也许它会为你提到的案例返回一些成功之外的东西。在ping时,还可以指定超时。 – Trainee4Life

相关问题