Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tcp Java套接字何时发送ack?_Tcp_Sockets - Fatal编程技术网

Tcp Java套接字何时发送ack?

Tcp Java套接字何时发送ack?,tcp,sockets,Tcp,Sockets,我的问题是,当接收器端的插座发送ack时?应用程序读取套接字数据时,还是底层获取数据并将其放入缓冲区时 我希望这样做是因为我希望双方应用程序都知道对方是否接受了数据包。发生这种情况时,由操作系统TCP堆栈决定,由于TCP向应用程序提供了一个流,因此在执行读/写操作的应用程序与通过线路发送的数据包和TCP ACK之间没有保证1:1的相关性 如果您需要确保另一方已接收/处理您的数据,您需要将其构建到您的应用程序协议中-例如,发送一个声明已接收数据的回复。发生这种情况时,由操作系统TCP堆栈决定,由于

我的问题是,当接收器端的插座发送ack时?应用程序读取套接字数据时,还是底层获取数据并将其放入缓冲区时


我希望这样做是因为我希望双方应用程序都知道对方是否接受了数据包。

发生这种情况时,由操作系统TCP堆栈决定,由于TCP向应用程序提供了一个流,因此在执行读/写操作的应用程序与通过线路发送的数据包和TCP ACK之间没有保证1:1的相关性


如果您需要确保另一方已接收/处理您的数据,您需要将其构建到您的应用程序协议中-例如,发送一个声明已接收数据的回复。

发生这种情况时,由操作系统TCP堆栈决定,由于TCP向应用程序提供了一个流,因此在执行读/写操作的应用程序与通过线路发送的数据包和TCP ACK之间没有保证1:1的相关性


如果您需要确保对方已接收/处理您的数据,您需要将其构建到您的应用程序协议中-例如,发送一个声明已接收数据的回复。

TCP/IP(以及因此而产生的java套接字)将保证您成功发送数据或最终收到错误(java情况下的例外)

TCP/IP(以及相应的java套接字)将保证您成功发送数据或最终得到错误(java的情况除外)

TCP确认用于确认传输层而不是应用层上的TCP数据包。只有您的应用程序才能明确表示它也已处理了来自缓冲区的数据。

TCP确认旨在确认传输层而不是应用层上的TCP数据包。只有您的应用程序才能明确表示它也处理了缓冲区中的数据。

这不是Java的问题。这完全是一个TCP/IP问题。TCP/IP协议与Java无关。请随意删除此问题中的“Java”。请阅读“否”答案和我对他的评论,以了解这是一个Java问题的原因。您是如何在应用程序级别解决此问题的?(在Java中?)这不是一个Java问题。这完全是一个TCP/IP问题。TCP/IP协议与Java无关。请随意删除此问题中的“Java”。请阅读“否”答案和我对他的评论,以了解这是一个Java问题的原因。您是如何在应用程序级别解决此问题的?(在Java中?)但这是Java,它应该为我提供所有操作系统的统一视图!确实如此。它只是不公开TCP确认。本机套接字API也没有。但它应该告诉我何时发送ack,以帮助我保持数据完整性。这对数据完整性没有任何影响,因为一端无法判断另一端是否收到了ack。此外,通知应用程序级别的内容完全超出了Java的控制范围。但这是Java,它应该为我提供所有操作系统的统一视图!确实如此。它只是不公开TCP确认。本机套接字API也没有。但它应该告诉我何时发送ack,以帮助我保持数据完整性。这对数据完整性没有任何影响,因为一端无法判断另一端是否收到了ack。此外,通知到应用程序级别的内容完全超出了Java的控制范围?当另一方应用程序读取数据时,或者当底层将数据放入应用程序缓冲区时?但当发送数据完成时?当另一方应用程序读取数据时,或者当底层将数据放入应用程序缓冲区时?