如何在不使用选择器的情况下阻止DatagramChannel中的超时处理

Fre*_*son 6 java udp nio datagram

我觉得我错过了一些非常明显的东西.

我的系统的整体结构使我想要使用没有选择器的阻塞DatagramChannel,以保持简单.我试图通过在套接字上设置超时来实现超时处理,但这似乎没有任何效果.

这个伪代码给出了我想要实现的内容的提示.

DatagramChannel channel = DatagramChannel.open();
channel.socket().bind(some address);
channel.socket().setSoTimeout(3000);
channel.send(outBuffer, peerAddress);

channel.receive(inBuffer);

另一方面,我有一个UDP服务器,它提供五个快速响应,然后,为了测试目的,在传递第六个响应之前延迟大约五秒钟.

延迟不会触发SocketTimeoutException.这是为什么?调用channel.receive时,似乎没有考虑套接字上设置的超时.

此致Fredrik

Ker*_*rry 5

显然,无法超时的问题不是DatagramChannel的错误,而是:

不是错误。SocketChannel(和DatagramChannel)中的read方法不支持超时。如果需要超时功能,请使用关联的Socket(或DatagramSocket)对象的read方法。

链接。