【问题标题】:Will socket.close() interrupt data transmission?socket.close() 会中断数据传输吗?
【发布时间】:2017-10-15 05:09:24
【问题描述】:
OutputStream out = socket.getOutputStream();
out.write(someData);
socket.close();

socket.close() 会导致对等套接字不接收someData

【问题讨论】:

  • 提问前你读过javadocs吗?
  • 在调用close()之前使用Socket#shutdownOutput()
  • 当然连接丢失了。如果要在关闭套接字后传输任何数据,则必须创建新的套接字。
  • @AJNeufeld 不必要的。为什么你不这么认为?
  • @Kishor 问题是关于丢失的数据,而不是丢失的连接。

标签: java sockets networking


【解决方案1】:

socket.close() 会导致对等套接字不接收 someData 吗?

绝对不是,在这种情况下。它会将一个 FIN 排入队列,该 FIN 只能由对等方在接收到所有待处理数据后作为流的结尾接收。

然而作为一般规则,您应该调用out.close(),以确保在out 中缓冲的任何数据都被刷新,以防out 是缓冲流,而不是socket.close(),它不关心任何缓冲流可能已经包裹在其输出流周围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 2011-01-17
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多