【发布时间】:2011-10-10 14:42:44
【问题描述】:
我有一个集成测试需要协调两个DatagramSockets,每个都在自己的线程中运行。一个套接字等待通过对 receive() 的阻塞调用来读取数据。另一个socket需要调用send(),但是必须在receive()阻塞之后进行,否则数据会丢失。
代码有点像这样:
接收者
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));
我不愿意在 send() 调用之前放置一个 Thread.sleep(),尽管这可能足以让接收者阻塞。有没有优雅的方法来做到这一点?
【问题讨论】:
-
UDP 没有握手方法来协调此类工作。一个基本的解决方案是向接收器发送等待“就绪”信号的数据包,然后一旦发送者收到确认,实际数据就会通过。我没有将此作为答案发布,因为我确信有人可以指出更好的方法。也许this 会有所帮助?
-
我也想过。我希望有一种方法可以与 Java 并发工具进行协调。
标签: java multithreading sockets udp