2012-08-01 168 views
2

我有以下方法:如何通过3G连接检查互联网连接状态?

public static bool IsNetworkConnected() 
{ 
    ConnectionProfile InternetConnectionProfile = NetworkInformation.GetInternetConnectionProfile(); 
    IReadOnlyList<ConnectionProfile> connectionProfile = NetworkInformation.GetConnectionProfiles(); 
    if (InternetConnectionProfile == null) 
     return false; 
    else 
     return true; 
} 

当我连接到互联网,在一个典型的方式,它工作正常 - 通过LAN电缆或Wi-Fi。当我使用我的3G USB调制解调器时,它返回错误(InternectConnectionProfile为空)。这是为什么?我该如何解决它?

+1

我通常会建议你忽略当前的连接状态,只是尝试什么,那就是你想要做在互联网上(最好在后台线程) - 再如果您在超时期限/重试次数之后无法完成任务,请向用户报告。连接可以在检查它们的存在和使用它们之间下降,或者在你正在做的任何事情的一半之间进行。既然你*有*编写代码来处理这些情况*无论如何*,保存一些编码,并避免预先检查。 – 2012-08-01 10:36:07

回答

4

您可以考虑在互联网上ping一台服务器。这不是对您的问题的100%回答,但可能从不同的角度有所帮助。

using System.Net; 
using System.Net.NetworkInformation; 

using (Ping Packet = new Ping()) 
{ 
    if (Packet.Send(IPAddress.Parse(IP), 1000, new byte[] { 0 }).Status == IPStatus.Success)) 
    { 
     // ... 
    } 
} 
+0

由于数据包有时似乎在路由器之间停止咖啡并且丢失,所以我会在报告“连接断开”之前尝试至少ping 3次,否则我同意这种直接的方法。 – Alex 2012-08-01 10:32:59

2

尝试

public static bool IsConnectedToInternet() 
{ 
     ConnectionProfile connectionProfile = NetworkInformation.GetInternetConnectionProfile(); 
     return (connectionProfile!=null && connectionProfile.GetNetworkConnectivityLevel() == NetworkConnectivityLevel.InternetAccess); 
}