我的问题是,当接收方的套接字发送确认时?在应用程序读取套接字数据时或底层获取数据并将其放入缓冲区时?
我想要这个,因为我希望双方应用程序知道对方是否接收了数据包。
答案 0 :(得分:4)
当发生这种情况时,由操作系统TCP堆栈决定,因为TCP向应用程序提供流,在执行读/写操作的应用程序与在线路上发送的数据包和TCP确认之间没有明确的1:1关联。 / p>
如果您需要确保对方已收到/处理了您的数据,您需要将其构建到您的应用程序协议中 - 例如发送回复,说明已收到数据。
答案 1 :(得分:3)
TCP ACK用于确认传输层而非应用层的TCP数据包。只有您的应用程序可以明确表示它还处理了缓冲区中的数据。
答案 2 :(得分:0)
TCP / IP(以及因此java套接字)将保证您成功发送数据或最终获得错误(在java的情况下例外)。