我有一个Windows窗体应用程序.当用户为我的应用程序导入许可证时,我想"打电话回家"(点击网页上的aspx页面)并注册许可证信息.
问题是用户可能没有在那时工作的互联网连接.我想先测试一下.检测用户是否有可用的互联网连接的最佳方法是什么?
在PPOE,至少有十万美元花在这个问题上.主要观点:
很多时候,HTTP连接会消失,然后返回"200 OK"消息.只有它不是你的网站; 它是酒店/咖啡馆/提供连接你的路由器.
API将以有趣和创造性的方式存在.例如,如果您曾经拥有调制解调器,但某些Windows网络API会返回错误的连接数据,但随后升级到DSL,但未运行向导.
在一些(非常重要的)地方,尝试连接将启动连接 - 拨号 - 每分钟充电.再次,在PPOE上他们发布了一个相当受欢迎的软件,它在凌晨3点完成了这项工作.为一些严重脾气暴躁的客户而制造.
一些主要的互联网服务提供商在宽带上运行时拥有"独特"的软件,他们不够聪明,只能使用他们提供的漂亮的以太网和TCP/IP.相反,他们使用以太网来模拟调制解调器(后者又设置为模拟以太网+ tcp/ip设置).它被称为PPPOE,它很难分辨你尝试使用的适配器
越来越多的家庭正在使用DSL和Cabel调制解调器,其中计算机是"连接"的,但仅限于本地盒子; 本地方框可能已失去连接,你永远不会知道.
唯一的解决方案是尝试连接并验证返回.
检查WebRequest.GetResponse方法
// Create a new WebRequest Object to the mentioned URL. WebRequest myWebRequest=WebRequest.Create("http://www.contoso.com"); Console.WriteLine("\nThe Timeout time of the request before setting is : {0} milliseconds",myWebRequest.Timeout); // Set the 'Timeout' property in Milliseconds. myWebRequest.Timeout=10000; // This request will throw a WebException if it reaches the timeout limit before it is able to fetch the resource. WebResponse myWebResponse=myWebRequest.GetResponse();
或者您可以调用InternetGetConnectedState API
[DllImport("wininet.dll")] private extern static bool InternetGetConnectedState(out int Description, int ReservedValue ) ; public static bool IsConnectedToInternet() { int Desc ; return InternetGetConnectedState(out Desc, 0); }