是否可以在 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 中循环发送数据包并接收确认。
我有一个 DatagramSocket,我知道 socket.receive() 有一个缓冲区,用于存储已发送到套接字的数据包。我正在尝试使用 UDP 实现一个可靠的协议,如果在我的 window 已满后,我可以一次卸载所有缓冲区,那将是理想的。如果我做了一个简单的循环,当缓冲区为空时 socket.receive() 会阻塞我的程序,这是我不想要的。
有什么方法可以访问该缓冲区吗?
没有,但是在非阻塞模式下有DatagramChannel
DatagramSocket
没有缓冲区。您的操作系统中的网络堆栈有一个缓冲区,但您无法访问它。
I am trying to implement a reliable protocol using UDP
我建议不要那样做 - 你最终会发明 TCP,但也会有你自己的错误。
听起来像是今晚要交的某个网络作业...
没有真正的方法可以一次卸载所有数据包。我建议将套接字设置为在一小段时间后超时(小于发件人的总超时值),并在 window 中循环发送数据包并接收确认。