在没有服务器端异常的情况下安全地关闭 Java 套接字

Closing a Java Socket safely without server side exceptions

从客户端关闭套接字连接的最安全方法是什么。先关机输入还是直接close()连接?

如果您的协议(TCP 顶部)不包含任何用于关闭会话的message/handshake,那么您必须通过关闭 TCP 连接来完成。

有两种关闭TCP连接的方法:

  • graceful:使用TCP SYN,所有未送达的数据都被传输(试过)。 read() InputStream returns -1;
  • ungraceful:使用TCP RST,所有未传送的数据都被丢弃。 InputStreamread() 抛出异常。

两者都可以在 java 中使用 Socket 的 close() 函数来完成。 优雅是默认值。不优雅,如果 setsolinger(true,0); 在 close() 之前完成。

关闭套接字已经关闭了输入和输出。您不需要明确执行其中任何一项。