out.close ();
in.read ( ByteBuffer.allocate ( 1 ) );
in.close ();
在上面的代码段中,out
是WritableByteChannel
,in
是ReadableByteChannel
。一旦其中一个对等体发送了EOT信号,就会在处理结束时找到该代码。在close()
上调用out
,然后读取in
以从远程对等方的套接字获取EOF。当read()
返回-1时,表示对等方已关闭套接字。下一行的close()
是多余的,因为本地套接字已经自动关闭了吗?
答案 0 :(得分:4)
从对等端接收流末尾并关闭通道是两回事。流末尾仅意味着将不再接收数据,但该通道仍在本地打开。您仍然应该调用close()
来释放正在使用的任何本地资源。
答案 1 :(得分:2)
当read()返回-1时,表示对等方已关闭套接字。
他的套接字。不是你的。 连接目前在入站方向上是半封闭的。你应该关闭你的终端,即你的插座。