【问题标题】:Java socket TCP teardownJava 套接字 TCP 拆解
【发布时间】:2013-04-13 12:07:55
【问题描述】:

创建套接字并建立连接后,我使用 BufferedReader 和 PrintWriter 从套接字写入/读取。

Socket s = new Socket(ip, port);
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter out = new PrintWriter(s.getOutputStream());

使用完套接字后,我将其关闭。

s.close();

这将导致发送 TCP fin 并留下半开的 TCP 连接。有什么方法可以检测客户端/服务器是否关闭了它的连接结束?

【问题讨论】:

  • 看看这个question,它应该回答你的问题并提供相当多的信息。

标签: java sockets tcp


【解决方案1】:

这将导致发送一个 TCP fin 并留下一个半开的 TCP 连接。

不完全是。它将留下一个半开的 TCP 连接,如果它接收到更多数据,它将发出重置。

有什么方法可以检测客户端/服务器是否关闭了它的连接端?

如果您已经关闭,则不会。如果你刚刚发出了写关闭,你可以一直读到 EOS,它会告诉你对等体关闭,然后关闭套接字。除非你真的必须同时关闭,否则没什么意义。

【讨论】:

  • 那么检测连接的一侧是否已关闭的最佳方法是什么?是在应用程序中实现一些通知其他客户端的东西吗?
  • 阅读 EOS 会告诉你。
猜你喜欢
  • 2012-08-23
  • 2010-10-10
  • 2017-08-10
  • 2020-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多