Java DatagramSocket接收()调用没有阻塞/没有抛出SocketTimeoutException

时间:2015-10-10 15:17:36

标签: java windows sockets datagram

我无法理解为什么UDP连接的接收呼叫似乎没有阻塞。任何帮助将不胜感激。

基本上,完整代码应该通过UDP读取和发送文件的字节段到另一个正在侦听特定端口的正在运行的进程,以便 进程可以重建(副本)文件。 在这种情况下,目前还没有这样的听众。下面的代码只包括我认为麻烦的部分。

eval

根据我认为应该发生的情况,考虑到没有指定端口的侦听器的情况,接收调用应该阻塞,等待永远不会发生的确认,直到超时值已过期,在这种情况下应该抛出SocketTimeoutException,激活相应的catch块并导致错误消息出现在屏幕上。

不幸的是我什么也没得到 - 在connection.receive()调用显示无限循环后放置一个print语句。无限循环是可以预期的,但为什么我没有得到抛出的SocketTimeoutException?

到目前为止我遇到的其他问题:

  1. setSotimeout on a datagram socket
  2. DatagramSocket not throwing SocketTimeout - Java
  3. Adding timeout to DatagramSocket - receive()

1 个答案:

答案 0 :(得分:1)

我已经解决了这个问题。以前DatagramSocket有InetSocketAddress。现在,不是将InetSocketAddress传递给DatagramSocket构造函数,而是传递任何东西:

connection = new DatagramSocket();

通过DatagramSocket发送的DatagramPackets将是具有InetSocketAddress的DatagramPackets。