如何在java中创建破碎的管道IO异常

时间:2013-05-07 14:13:42

标签: java sockets tcp

我试图了解破损的管道异常,并认为生成一个异常是一个好主意,但不幸的是我无法做到。

服务器 - netcat 客户端 - Java套接字

Server ------------- Client
          <--------- SYN
  SYN,ACK --------->
          <--------- ACK
  FIN,ACK --------->        (when server dies on kill -9)
          <--------- ACK
          <--------- writes some bytes          
  RST ------------->        (no exception thrown at java side) 
  1. 为什么在写入已经死亡的服务器进程时不会抛出损坏的管道?

1 个答案:

答案 0 :(得分:0)

管道是数据流,通常是从文件或网络套接字读取的数据。当该管道从另一端突然关闭时,会发生破裂的管道。对于flie,这可能是文件安装在已断开连接的光盘或远程网络上。对于网络套接字,可能是网络被拔掉或者另一端的进程崩溃。

尝试阅读大文件,当客户端正在阅读时,请拔下网络电缆或禁用网络适配器将其从网络中取出。

只需关闭服务器。

确保客户端正在从服务器读取大字节流,以便您可以手动执行上述任一步骤。