我感觉我可能错过了一些非常显然的东西。
我的系统整体结构让我想使用阻塞DatagramChannel而不使用Selectors,以保持简单。我尝试通过在套接字上设置超时来实现超时处理,但这似乎没有效果。
下面是伪代码,给出了我想要实现的内容。
DatagramChannel channel = DatagramChannel.open(); channel.socket().bind(某个地址); channel.socket().setSoTimeout(3000); channel.send(outBuffer, 对等地址);
channel.receive(inBuffer);
另一方面,我有一个UDP服务器,它会快速地返回五个响应,然后为了测试目的,在发送第六个响应之前延迟约五秒钟。
这个延迟不会触发SocketTimeoutException。为什么?调用channel.receive时好像没有考虑套接字上设置的超时。
谢谢, Fredrik
我的系统整体结构让我想使用阻塞DatagramChannel而不使用Selectors,以保持简单。我尝试通过在套接字上设置超时来实现超时处理,但这似乎没有效果。
下面是伪代码,给出了我想要实现的内容。
DatagramChannel channel = DatagramChannel.open(); channel.socket().bind(某个地址); channel.socket().setSoTimeout(3000); channel.send(outBuffer, 对等地址);
channel.receive(inBuffer);
另一方面,我有一个UDP服务器,它会快速地返回五个响应,然后为了测试目的,在发送第六个响应之前延迟约五秒钟。
这个延迟不会触发SocketTimeoutException。为什么?调用channel.receive时好像没有考虑套接字上设置的超时。
谢谢, Fredrik