C 如何检测计算机上是否存在internet连接?

C 如何检测计算机上是否存在internet连接?,c,networking,C,Networking,我需要检测是否存在internet连接。更准确地说,让我们假设应用程序分为两部分-A和B A负责检查系统是否连接到internet。如果它发现没有连接,它启动B部分。一旦它检测到有网络连接,它就会杀死B并继续自己的工作 做应用程序的一部分的最佳方法是什么?连续不断的砰砰声听起来很可怕。必须有更好的方法来实现这一点(最好是C)。ping google.com在您的代码中,您必须通过使用套接字打开与网站的连接来检查internet连接是否存在 您可以使用足够的权限测试各种网络接口并检查其状态。这将告

我需要检测是否存在internet连接。更准确地说,让我们假设应用程序分为两部分-A和B

A负责检查系统是否连接到internet。如果它发现没有连接,它启动B部分。一旦它检测到有网络连接,它就会杀死B并继续自己的工作


做应用程序的一部分的最佳方法是什么?连续不断的砰砰声听起来很可怕。必须有更好的方法来实现这一点(最好是C)。

ping google.com

在您的代码中,您必须通过使用套接字打开与网站的连接来检查internet连接是否存在

您可以使用足够的权限测试各种网络接口并检查其状态。这将告诉您是否有任何接口连接到网络并正在运行。但是,这不会告诉您连接是否实际可用,即连接到internet(或您的本地网络,如果您只需要这些)。除了实际使用它,我不知道该怎么做

使用ICMP(ping)在低级别上可能很有用,但您可能需要的是通过TCP/IP连接到实际端点以执行实际工作。我想说的是,您应该更改应用程序的设计,以便B负责指示何时由于缺少所依赖的资源而无法继续—网络或其他。A和B应进行沟通,以便A了解情况,并能够杀死B或对B作出反应,终止其自身,从而继续其工作

  • Firstrun:要求用户输入网络参数,如代理设置。保存此信息

  • 下次运行:使用这些设置检查Internet连接。您可以简单地进行DNS搜索

  • 如果结果为阴性,请用户检查设置


  • 检查电缆是否已连接,如果已连接,请将您的internet连接ping到google.com等任何主机。

    许多公司都有相应的措施来防止传出ICMP请求,例如TCP连接到80/443以外的端口,甚至通过(透明地)代理您的流量来阻止您直接访问internet

    在互联网连接下,我会理解任何与外界联系的方式,无论是UDP、TCP还是ICMP。根据您的应用程序需要与internet联系的内容,我建议您检查相同的协议,因为这是对您的应用程序唯一重要的事情

    如果您的应用程序使用HTTP与外部源进行通信,请尝试连接到一些您可能怀疑未被列入黑名单且正常运行时间可靠的站点。像google.com、microsoft.com、apple.com等等

    编辑:

    我不确定具体是什么,所以让我给你一个假设情况的例子

    应用程序A在其运行的系统上收集数据,并将其转发到侦听服务器主机的Web服务。yourcompany.com:80 应用程序B基本上会在Web服务关闭时接管它的工作,并记录所有内容,这样就不会丢失任何数据

    • 一切正常后,应用程序A将向您的web服务发送数据
    • 一旦此连接断开,您将立即启动应用程序B(这里最明显的一句话是,为什么不让应用程序B作为故障保护运行)
    • 应用程序A连接到应用程序B并转发它所缓冲的内容
    • 应用程序A继续尝试重新建立与您的Web服务的连接,一旦它备份,将请求应用程序B停止

    如果您面临的问题与此完全不同,请更具体地描述应用程序a和应用程序B应该做什么。我非常乐意帮忙。

    重复?要测试internet连接而不是(关闭的)网络连接?联系一些已知的网络主机对我来说似乎相当合理。这完全取决于你所说的网络连接。除了路由器、防火墙等,你不能不ping主机。谷歌齿轮是如何实现这一点的?我相信这是特定于基于web的应用程序的,研究它们是如何做到这一点的可能会对我有所帮助。有谁能告诉我他们文档的相关部分或者可能是源代码吗?问题是,A需要在没有连接的情况下尽快启动B。否则应用程序将丢失大量数据。所谓连接,我指的是本地网络以外的主机。所以持续的ping听起来并不太好(至少对我来说)。在另一个线程中给出的/sbin/route应答是有意义的。我现在不在Linux上。我会在启动并登录后立即检查它。老实说,我认为您最好的选择是使用一些与您尝试连接的端点类似的替代端点。没有其他可靠的方法“检测是否存在互联网连接”。而且
    /sbin/route
    的想法毫无意义:你只知道本地路由表的内容,但除此之外什么都不知道,它也不会在途中检测防火墙ICMP.OP特别要求提供一种不涉及持续ping的解决方案。语法时间:尽管如此!=就这样吧。尽管它的意思是“然而”或“即使”。你可以通过词源记住它:“Al(尽管)it be。”OP特别要求一个不涉及持续ping的解决方案。