套接字在写入流时关闭但在读取时不关闭

时间:2014-01-14 06:42:06

标签: java multithreading sockets

我最近注意到在我的多线程Java套接字处理程序中,当我尝试在套接字上写入时,我遇到异常,但是我仍然通过读取接收数据。我的理解是,如果套接字被关闭,输入流读取器在尝试下一次读取时也会抛出套接字关闭异常。是不是这种情况,如果我在尝试写入时遇到此异常,是否应该手动关闭套接字?

1 个答案:

答案 0 :(得分:2)

TCP连接可以在写入方向上关闭,但不能在读取方向上关闭,这种连接称为“half closed”。您应该继续读取对方发送的其余数据,否则连接将无法正常关闭。

如果你考虑一下,你怎么能理智地关闭TCP连接?如果你一步一步关闭它,如果对方在关闭它之前向你发送一些数据会发生什么?你仍然需要接收它。但是,显然,你不能继续发送数据。