This是一个类似的答案,但不是我确切想要的。我想要做以下两件事:Java:用于查找写入非阻塞TCP SocketChannel的所有字节是否已发送给接收方的API?
- 我想知道是否所有的字节已经发送到接收器?
- 另外我想知道socket的输出缓冲区的当前剩余容量,而不尝试写入它?
This是一个类似的答案,但不是我确切想要的。我想要做以下两件事:Java:用于查找写入非阻塞TCP SocketChannel的所有字节是否已发送给接收方的API?
以你的编号点依次是:
你无法知道。数据可能会被操作系统和TCP/IP堆栈缓冲,并且没有方法可以确定它是否实际上已经放置在电线上。即使知道它被放置在电线上也不能保证任何事情,因为它可能在运输途中丢失。
对于UDP,您永远不会知道目标系统是否接收到数据,除非您编写基于UDP的协议,以便远程系统确认数据。
对于TCP协议栈将确保您的代码在数据在传输过程中丢失时得到通知,但在您收到确认消息之前可能会等待很多秒。
有没有更简单的API,只是为了检查(布尔响应)缓冲区是否为空? – PHcoDer
没有任何形式的API。 – EJP