繁体   English   中英

Java:用于查找是否已将写入非阻塞TCP SocketChannel的所有字节发送到接收方的API?

[英]Java: API to find if all the bytes written to Non-Blocking TCP SocketChannel has been sent to receiver?

是一个类似的答案,尽管这并不是我真正想要的。 我想做以下两件事:

  1. 我想确定是否所有字节都已发送到接收器?
  2. 我也想知道套接字输出缓冲区的当前剩余容量,而无需尝试对其进行写操作吗?

按顺序编号:

  1. 您可以发现的唯一方法是让对等应用程序确认收据。
  2. Java中没有这样的API。 据我所知,在BSD套接字层也没有一个,但是我对Linux的外部限制并不熟悉,在Linux的外部限制中,它们可能已经引入了一些类似的东西。

你不知道 数据可能由OS和TCP / IP堆栈缓冲,并且没有确定其是否已实际放置在网络上的方法。 即使知道将其放在电线上也不能保证任何东西,因为它可能会在运输中丢失。

对于UDP,除非编写基于UDP的协议以使远程系统确认该数据,否则您将永远不知道目标系统是否已接收到该数据。

对于TCP,协议栈将确保在传输过程中丢失数据时通知您的代码,但是可能需要几秒钟才能收到确认。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM