java - 如果 read 返回 -1 套接字是否自动关闭?

标签 java sockets tcp

  out.close ();
  in.read ( ByteBuffer.allocate ( 1 ) );
  in.close ();

在上面的代码片段中,out 是一个WritableByteChannelin 是一个ReadableByteChannel。一旦其中一个对等方发送了 EOT 信号,就会在处理结束时找到此代码。 close()out 上调用,然后读取 in 以从远程对等方的套接字获取 EOF。当read() 返回-1 时,表明对端已关闭套接字。下一行的close()是不是多余的,因为本地套接字已经自动关闭了?

最佳答案

从对等点接收流结束和关闭 channel 是两件不同的事情。 end-of-stream 只是意味着不再接收数据,但 channel 在本地端仍然打开。您仍然应该调用 close() 来释放任何正在使用的本地资源。

关于java - 如果 read 返回 -1 套接字是否自动关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28574738/

相关文章:

java - Apache Kafka 从代码创建主题

java - 添加到其他 JPanel 时 JPanel 不呈现

java - 实际例子使用Hibernate FlushMode.ALWAYS

java - 在java中处理套接字

c - linux选择性能场景

java - 如何使用java byte[]准确发送如此复杂的十六进制、二进制协议(protocol)数据?

java - 在内网开一个http连接开销大吗?

javascript - 如何使 React 组件在接收到 Web 套接字上的更新后重新加载?

c# - 使用 Over TCP 发送多个文件

http - 客户端机器/浏览器如何处理未请求的 HTTP 响应?