有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

sockets Java NIO SocketChannel IOException:断管

斯蒂芬·C的答案here很好地描述了这个问题。他说,管道破裂异常是由导致连接关闭的原因造成的,而不是应用程序。我想知道这些“东西”通常是什么导致连接关闭的?处理这些问题的可能方法是什么

我的使用环境: 我在Azure上的一组机器上运行我的应用程序,所有这些机器都在与其中一台机器对话。我几乎总是会犯这样的错误

TCP超时可能是原因之一吗?如果是,那么如何使socket通道(在它们后面运行的影响socket中)由于TCP超时而从不关闭


共 (2) 个答案

  1. # 1 楼答案

    您可以获取与SocketCannel关联的套接字,然后设置其keepAlive属性。像这样的

    SocketChannel sockChannel;
    /*
    connect here
    */    
    sockChannel.socket().setKeepAlive(true);
    
  2. # 2 楼答案

    每当客户端离开正在侦听的套接字时,就会出现断管异常。这可能是由于服务器响应缓慢,客户端达到套接字超时。比如,在浏览器的情况下,如果任何http请求需要很长时间才能响应,并且用户关闭了浏览器,那么应用程序日志中将显示一个断管异常

    现在要解决这个问题,要么增加套接字超时,要么修复服务器响应