当前位置: 首页 > 面试题库 >

HttpUrlConnection如何设置SO_KEEPALIVE

吕淮晨
2023-03-14
问题内容

是否可以为JDK stdlib设置套接字级别选项(如SO_KEEPALIVE)HttpUrlConnection?我试图找出一种获取HTTP请求的方法,该方法不会成为偶尔的“挂起”连接(似乎经常由于网络数据包丢失而发生)的受害者。一个更强大的HTTP客户端。我知道有这种setReadTimeout方法,但我正在尝试寻找一些方法来使TCP流恢复正常运行,而不是像读取超时那样中止它。或者至少报告连接发生故障,而不是永久挂起读取。但这还允许读取在假设连接“仍处于活动状态”的情况下“在需要时”返回。

经过一些检查,看来C层套接字和Java层套接字的SO_KEEPALIVE缺省值均为“ off”。


问题答案:

这不是基于一个谬论,而是基于三个谬论。

  1. 尽管名称不正确,SO_KEEPALIVE不会“将TCP流推回生活”。在两个小时的默认间隔后,它仅检测到死连接。不是您要找的东西。

  2. 读取超时不会终止连接。它抛出一个SocketTimeoutException。连接仍然有效,后续读取可能会成功。

  3. 检测到丢弃的数据包并在TCP中重新传输。

使用读取超时。



 类似资料:
  • 如何使用< code>HttpURLConnection设置HTTP请求方法MOVE? 使用< code>HttpURLConnection或依赖于该类的库,代码将引发异常< code >,其原因是:Java . net . protocol exception:Invalid HTTP method:MOVE 。所以我猜Java平台不支持< code>MOVE方法。 是否有针对此问题/限制的补丁

  • 我目前有一个应用程序,将使HTTP发布请求到很多URL。一些连接失败,出现以下异常。 线程“main”javax.net.ssl.SSLProtocolException中的异常:握手警报:sun.security.ssl.ClientHandshaker.handshakeAlert(ClientHandshaker.java:1410)位于sun.security.ssl.SSLSocketI

  • 问题内容: 我对重用HttpUrlConnection(作为我正在开发的服务器和客户端之间的全状态协议的一部分)感兴趣。我知道持久性http有一个Connection = keep-alive标头。现在,我想知道如何重用这种构想。我写了这段代码: 现在如何将这个“ B”标头重新发送到服务器,我尝试重新连接等,但是没有任何效果。 服务器也执行 我看过很多论坛,但是没有人写过。也许不处理这个? 问题答

  • 问题内容: 我需要在服务器端执行什么操作才能允许某人使用JSONP从该服务器获取数据。我还需要在用户端做什么?我想使用JSONP替代XMLHttpRequest。 由于同源政策,它无法在我的Firefox扩展中使用。因此,人们推荐使用JSON,但是在Internet上搜索教程和指南后,我很迷失。 谢谢您的帮助! 问题答案: 假设您的服务器运行的是PHP,则只需添加“回调” GET请求。 在客户端(

  • 我安装了模块(browserify、react、reactify),并尝试使用browserify处理jsx文件。 C:\dev\React。js 错在哪里?

  • 问题内容: 我试图对Java Html Document进行一些改进,但是我遇到了与之相关的问题。一件事是,如果用户代理是Java VM,则某些服务器会阻止请求。另一个问题是不会设置或标头字段。由于多个站点使用这些字段来验证是否从其自己的站点访问了内容,因此在此也将我屏蔽了。据我所知,唯一的解决方案是替换HTTP协议的URL处理程序。还是有任何方法可以修改默认的HTTP处理程序? 问题答案: 打开