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

Is it possible to access the buffer of a DatagramSocket in Java

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

有什么方法可以访问该缓冲区吗?

没有,但是在非阻塞模式下有DatagramChannel

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

I am trying to implement a reliable protocol using UDP

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

听起来像是今晚要交的某个网络作业...

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