Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检测互联网接入?_Java_C#_Networking_Connection - Fatal编程技术网

Java 如何检测互联网接入?

Java 如何检测互联网接入?,java,c#,networking,connection,Java,C#,Networking,Connection,我需要创建一个可靠的测试,看看当前主机是否可以使用HTTP(端口80)或HTTPS(端口443)访问公共互联网 这不是一个编程语言问题。我把那部分搞定了 我的想法是,我将在公共互联网上测试 他永远活着 可以响应HTTP或HTTPS请求 可以快速响应(我想我会做一个HEAD请求以保持较小的响应) 也将存在于可预见的未来 那个终点会是什么?是否有一些官方服务器可以做出上述承诺,例如w3.org提供的东西?(我知道人们倾向于使用www.google.com或类似的网站,但我觉得这不是一个好的解决方案,

我需要创建一个可靠的测试,看看当前主机是否可以使用HTTP(端口80)或HTTPS(端口443)访问公共互联网


这不是一个编程语言问题。我把那部分搞定了

我的想法是,我将在公共互联网上测试

  • 他永远活着

  • 可以响应HTTP或HTTPS请求

  • 可以快速响应(我想我会做一个HEAD请求以保持较小的响应)

  • 也将存在于可预见的未来

  • 那个终点会是什么?是否有一些官方服务器可以做出上述承诺,例如w3.org提供的东西?(我知道人们倾向于使用
    www.google.com
    或类似的网站,但我觉得这不是一个好的解决方案,或者?)

    我的进一步想法是:

    • 不要使用ping测试之类的测试,因为ICMP被许多人阻止 防火墙

    • 可能需要是真正的HTTP/HTTPS请求才能通过 潜在的防火墙。如果存在以下情况,则普通套接字测试可能会给出错误的结果: 中间有防火墙。所以我要做一个真正的HTTP/HTTPS测试。我的HTTPS测试将忽略证书,因为这不是我想要测试的

    • 无论我做什么,我都会间接地测试名称解析(除非我是针对一个我认为不太可能的IP地址进行测试)。这没关系。在任何情况下,名称解析也是“互联网连接”的一部分

    执行internet连接测试(我只关心HTTP和HTTPS)最可靠的方法是什么?我应该使用哪个端点

    我假设在我之前有成千上万的开发者已经解决了这个问题。但是怎么做呢

    更新和最终解决方案 似乎我不会让任何人使用官方端点来回答这个问题(也许根本没有这样的端点?),所以我要做的是向
    google.com
    发送一个HTTP HEAD请求。我的请求将具有HTTP头元素
    缓存控制:无缓存
    ,希望避免中间代理从自己的缓存中应答我。然后,我将对HTTPS重复完全相同的测试

    没有完美的测试,但从我的要求来看,上面的内容似乎是最接近的


    感谢所有回答的人。

    我建议您看看。选择几个对您来说合理的主机,并执行以下操作:

    // create a client
    var httpClient = new HttpClient();
    // create a request to your site / host
    var request = new HttpRequestMessage(HttpMethod.Head, new Uri(your-host));
    // await it
    var response = await httpClient.SendAsync(request);
    // Check that the response seems valid, so that it is not just a redirect somewhere else
    
    并捕获抛出的任何异常


    不过需要注意的是,很难辨别你是否有实际的互联网接入,因为没有“总的”互联网接入。您必须定义internet访问的含义:)

    “这不是一个编程语言问题”意味着它可能不是stackoverflow的问题,可能更有用。google.com到底出了什么问题?不要以为会有一个更好的可用性网站。如果第一个网站失败,可能会尝试检查多个网站。制作一个包含“hello”内容的粘贴箱,并请求该内容的html。当然,你可以访问
    google.com
    并不一定意味着你正在接入互联网——你很可能正在某处与代理交谈。至少做一个适当的谷歌搜索请求,在一些奇怪和随机的事情上:)你是关于“在我之前有数千名开发者已经解决了这个问题”。@Luaan:你是对的,但我想我可以在HTTP头请求上设置一些头元素,以确保中间的代理不会试图从自己的缓存中为它服务?