我有一个DatagramSocket,我知道socket.receive()有一个缓冲区,用于存储已发送到套接字的数据包。我正在尝试使用UDP实现一个可靠的协议,如果在我的窗口已满后,我可以立即卸载缓冲区,这将是理想的。如果我做了一个简单的循环,当缓冲区为空时,socket.receive()会阻止我的程序,这是我不想要的。
有没有办法访问该缓冲区?
答案 0 :(得分:0)
不,但在非阻止模式下有DatagramChannel
。
答案 1 :(得分:0)
听起来像今晚到期的某个网络分配......
没有真正的方法可以一次卸载所有数据包。我建议在一小段时间(小于发送方的总超时值)之后将套接字设置为超时,然后循环在窗口中发送数据包并接收确认。
答案 2 :(得分:-1)
DatagramSocket
没有缓冲区。操作系统中的网络堆栈有一个缓冲区,但您无法访问它。
我正在尝试使用UDP
实现可靠的协议
我建议不要那样做 - 你最终会发明TCP,但是你自己也有错误。