Java:API以查找写入非阻塞TCP SocketChannel的所有字节是否已发送到接收器?
这是一个类似的答案,虽然不是我想要的。我想做以下两件事:Java:API以查找写入非阻塞TCP SocketChannel的所有字节是否已发送到接收器?,java,sockets,nonblocking,tcpsocket,Java,Sockets,Nonblocking,Tcpsocket,这是一个类似的答案,虽然不是我想要的。我想做以下两件事: 我想知道是否所有字节都已发送到接收器 我还想知道套接字输出缓冲区的当前剩余容量,而不尝试写入它 将编号的点按顺序排列: 您可以找到答案的唯一方法是让对等应用程序确认收据 Java中没有这样的API。据我所知,在BSD套接字层也没有,但我不熟悉Linux的外部限制,他们可能已经引入了一些这样的东西 将编号的点按顺序排列: 您可以找到答案的唯一方法是让对等应用程序确认收据 Java中没有这样的API。据我所知,在BSD套接字层也没有,但我不熟
将编号的点按顺序排列:
将编号的点按顺序排列:
你不可能知道。数据可能由操作系统和TCP/IP堆栈进行缓冲,并且没有方法确定数据是否已实际放置在线路上。即使知道它被放在电线上也不能保证任何东西,因为它可能在运输过程中丢失 对于UDP,除非您编写基于UDP的协议以便远程系统确认数据,否则您永远不会知道目标系统是否接收到数据
对于TCP协议栈,如果数据在传输过程中丢失,协议栈将确保您的代码得到通知,但在您收到确认之前可能需要几秒钟。您无法知道。数据可能由操作系统和TCP/IP堆栈进行缓冲,并且没有方法确定数据是否已实际放置在线路上。即使知道它被放在电线上也不能保证任何东西,因为它可能在运输过程中丢失 对于UDP,除非您编写基于UDP的协议以便远程系统确认数据,否则您永远不会知道目标系统是否接收到数据
对于TCP协议栈,如果数据在传输过程中丢失,协议栈将确保您的代码得到通知,但在您收到确认之前可能需要很多秒。是否有更简单的API,仅用于检查缓冲区是否为空(布尔响应)?没有任何形式的API。是否有更简单的API,仅用于检查(布尔响应)缓冲区是否为空?没有任何形式的API。