我需要检测互联网连接的存在/不存在。更确切地说,让我们假设应用程序分为两部分--A和B.
A负责检查系统是否已连接到互联网。如果它发现没有连接,它会启动B部分。一旦检测到有网络连接,就会杀死B并继续自己的工作。
执行A部分应用程序的最佳方法是什么?连续的声音听起来很可怕。必须有更好的方法(最好是在C中)。
答案 0 :(得分:2)
如果有足够的权限,您可以测试各种网络接口并检查其状态。这将告诉您是否有任何接口连接到网络并运行。但是,这不会告诉您连接是否实际可用,即连接到互联网(如果您需要,则连接到本地网)。无论如何我还不知道如何做到这一点。
使用ICMP(ping)在低级别可能很有用,但可能您需要的是通过TCP / IP连接到实际端点以进行实际工作。我会说你应该改变你的应用程序的设计,以便B负责指示它由于缺乏它依赖的资源而无法继续 - 网络或其他方式。 A和B应该进行通信,以便A了解情况并且能够杀死B或响应B终止自身并因此继续其工作。
答案 1 :(得分:1)
许多公司已采取措施防止传出ICMP请求,TCP连接到80/443以外的端口,甚至阻止您通过(透明地)代理流量直接到达互联网。
在互联网连接下,我会理解与外界联系的任何方式,无论是UDP,TCP还是ICMP。根据您的应用程序需要联系互联网,我建议检查相同的协议,因为这是对您的应用程序唯一重要的事情。
如果您的应用程序使用HTTP与外部源进行通信,请尝试连接到您怀疑不会被列入黑名单且具有可靠正常运行时间的几个站点。像google.com,microsoft.com,apple.com等......
编辑:
我不确定具体是什么,所以让我举一个假设情况的例子。
应用程序A在其运行的系统上收集数据并将其转发给在yourserverhost.yourcompany.com上收听的Web服务:80 应用程序B基本上会在Web服务关闭时接管Web服务,并记录所有内容,以免数据丢失。
如果您遇到的问题与此类似,请提供有关App A和App B应该做的更具体的描述。我将非常乐意提供帮助。
答案 2 :(得分:0)
在您的代码中,您必须使用套接字打开与网站的连接来检查是否存在互联网连接。
答案 3 :(得分:0)
Firstrun:要求用户输入网络参数,如代理设置。保存此信息。
下次运行:使用这些设置检查Internet连接。您可以直接进行DNS搜索。
如果结果为否定,请让用户检查设置。
答案 4 :(得分:0)
检查电缆是否已连接,如果是,请将您的互联网连接ping到任何主机google.com。
答案 5 :(得分:-2)
ping google.com