我有一个集成测试,需要协调两个DatagramSockets,每个都在自己的线程中运行。一个套接字等待通过阻塞调用receive()来读取数据。另一个套接字需要调用send(),但是这必须在receive()被阻塞之后发生,否则数据将会丢失。如何使用UDF协调发送和接收DatagramSockets
的代码是一个有点像这样:
接收机
byte[] buf = new byte[1024];
new DatagramSocket(7654).receive(new DatagramPacket(buf, buf.length));
发件人
new DatagramSocket(7654).send(
new DatagramPacket("hello".getBytes(Charset.forName("UTF-8")), 5));
我不愿意前把一个Thread.sleep()方法send()调用,尽管这可能足以让接收器阻塞。有没有一个优雅的方式来做到这一点?
UDP没有握手的方法来协调这类工作的一个基本的解决办法是用等待“准备好”信号的数据包来激发接收器,然后一旦发送者收到确认信息,实际数据就会通过。我没有发布这个答案,因为我确信有更好的方法有人可以指点你,也许[this](http://www.oracle.com/technetwork/java/socket-140484.html#multi)会有帮助吗? – Grambot
我也想过这个。可能有办法用Java并发工具来协调事情。 – hertzsprung