我最近注意到在我的多线程Java套接字处理程序中,当我尝试在套接字上写入时,我遇到异常,但是我仍然通过读取接收数据。我的理解是,如果套接字被关闭,输入流读取器在尝试下一次读取时也会抛出套接字关闭异常。是不是这种情况,如果我在尝试写入时遇到此异常,是否应该手动关闭套接字?
答案 0 :(得分:2)
TCP连接可以在写入方向上关闭,但不能在读取方向上关闭,这种连接称为“half closed”。您应该继续读取对方发送的其余数据,否则连接将无法正常关闭。
如果你考虑一下,你怎么能理智地关闭TCP连接?如果你一步一步关闭它,如果对方在关闭它之前向你发送一些数据会发生什么?你仍然需要接收它。但是,显然,你不能继续发送数据。