Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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 NIO SocketChannel IOException:管道断裂_Java_Sockets_Azure_Tcp_Nonblocking - Fatal编程技术网

Java NIO SocketChannel IOException:管道断裂

Java NIO SocketChannel IOException:管道断裂,java,sockets,azure,tcp,nonblocking,Java,Sockets,Azure,Tcp,Nonblocking,斯蒂芬C的答案很好地描述了这个问题。他说,管道破裂异常是由导致连接关闭的原因引起的,而不是应用程序。我想知道这些“东西”通常是什么导致连接关闭的?处理这些问题的可能方法是什么 我的使用环境: 我在Azure上的一组机器上运行我的应用程序,所有这些机器都在与其中一台机器对话。我几乎总是犯这样的错误 TCP超时可能是原因之一吗?如果是,那么如何使套接字通道(在它们后面运行的影响套接字中)由于TCP超时而从不关闭?每当客户端离开正在侦听的套接字时,就会出现断管异常。这可能是由于服务器响应缓慢,客户端已

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

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


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

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


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

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

SocketChannel sockChannel;
/*
connect here
*/    
sockChannel.socket().setKeepAlive(true);

谢谢@VineetKasat如何增加套接字超时?我尝试在[java文档][1]中查找,但找不到合适的内容。[1] 您如何跨机器进行通信。在java中,它只是一个需要修改的简单属性。我在这些通道上使用SocketChannels和读写操作。那是什么财产?你说的是setSoTimeout()(用于普通套接字?)是的,我说的是相同的属性。谢谢@Vinet。但是SocketChannel的java文档没有显示任何这样的属性。