是否可以在Java中访问DatagramSocket的缓冲区

时间:2016-09-15 11:12:04

标签: java sockets network-programming udp

我有一个DatagramSocket,我知道socket.receive()有一个缓冲区,用于存储已发送到套接字的数据包。我正在尝试使用UDP实现一个可靠的协议,如果在我的窗口已满后,我可以立即卸载缓冲区,这将是理想的。如果我做了一个简单的循环,当缓冲区为空时,socket.receive()会阻止我的程序,这是我不想要的。

有没有办法访问该缓冲区?

3 个答案:

答案 0 :(得分:0)

不,但在非阻止模式下有DatagramChannel

答案 1 :(得分:0)

听起来像今晚到期的某个网络分配......

没有真正的方法可以一次卸载所有数据包。我建议在一小段时间(小于发送方的总超时值)之后将套接字设置为超时,然后循环在窗口中发送数据包并接收确认。

答案 2 :(得分:-1)

DatagramSocket没有缓冲区。操作系统中的网络堆栈有一个缓冲区,但您无法访问它。

  

我正在尝试使用UDP

实现可靠的协议

我建议不要那样做 - 你最终会发明TCP,但是你自己也有错误。