Java 通过TCP套接字发送数据并立即关闭是否仍能保证我的数据到达?

Java 通过TCP套接字发送数据并立即关闭是否仍能保证我的数据到达?,java,sockets,networking,tcp,Java,Sockets,Networking,Tcp,我所说的保证是指TCP的一个普遍理解的特性,即如果一个数据包被损坏或丢失,那么它将不被确认并被重新发送 考虑(在java中)发送方发送一些数据并立即关闭套接字的情况。如果数据丢失或在传输过程中损坏,接收者将永远无法获取它吗?或者发送方套接字是否等待并实际不关闭,直到所有适当的ACK都被读回 我自己也尝试过跟踪socket.close()方法,但这很难,因为不仅有许多内部socket实现,而且该功能还使用模棱两可的方法名将多个路径分割开来 考虑(在java中)发送方发送一些数据并立即关闭套接字的情

我所说的保证是指TCP的一个普遍理解的特性,即如果一个数据包被损坏或丢失,那么它将不被确认并被重新发送

考虑(在java中)发送方发送一些数据并立即关闭套接字的情况。如果数据丢失或在传输过程中损坏,接收者将永远无法获取它吗?或者发送方套接字是否等待并实际不关闭,直到所有适当的ACK都被读回

我自己也尝试过跟踪socket.close()方法,但这很难,因为不仅有许多内部socket实现,而且该功能还使用模棱两可的方法名将多个路径分割开来

考虑(在java中)发送方发送一些数据并立即关闭套接字的情况。如果数据丢失或在传输过程中损坏,接收者将永远无法获取它吗

TCP将重新传输,至少在其重试计时器或计数器过期之前,在此之后,它将放弃并停止连接

或者发送方套接字是否等待并实际不关闭,直到所有适当的ACK都被读回


对。这发生在TCP中,而不是Java中。

大多数资源管理发生在JVM下面的操作系统级别

在TCP协议的情况下,它完全由操作系统管理

Application tells JVM to send data on TCP Stream
JVM access OS functions to perform data send task.
OS manages TCP protocol.
data gets sent over the network.
数据从JVM复制到操作系统内存空间中,因此即使JVM中止 TCP合同仍应妥善处理

如果JVM停止或请求操作系统关闭套接字,它应该保持套接字 打开,直到另一个端点确认所有数据已到达或另一个端点 端点关闭

由于JVM只与操作系统接口,所以在Java中看不到这种管理代码
它们假定操作系统和JVM正确地处理了管理。

您应该使用并等待关闭事件,就像远程主机关闭了连接一样。此方法是C套接字函数的包装器,它接受一个参数来决定关闭哪个网络流。

应该接收发送的任何内容。操作系统应保持套接字打开,直到客户端确认最后一段。套接字主要由操作系统处理,java接口进入操作系统,因此您可能无论如何都找不到要查找的代码。谢谢,请输入该代码作为答案,我将接受。如果发送应用程序需要知道数据已收到,但实际上没有回答问题,则为True。