gpt4 book ai didi

java - 如何使用 UDF DatagramSockets 协调发送和接收

转载 作者:太空宇宙 更新时间:2023-11-04 08:34:07 24 4
gpt4 key购买 nike

我有一个集成测试,需要协调两个 DatagramSockets ,每个都在自己的线程中运行。一个套接字通过阻塞调用 receive() 等待读取数据。另一个套接字需要调用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() ,尽管这可能足以让接收者阻塞。有没有一种优雅的方法来做到这一点?

最佳答案

在 send() 之前等待信号量。在 receive() 调用之前向一个单元发出信号。考虑到网络延迟,如果在进行 receive() 调用和设置 rx 套接字之前收到 UDP 回复,我会感到惊讶。您可以通过提高接收线程的优先级(或降低发送线程的优先级)来确保。

您可以在 send() 之后等待另一个信号量,并在 receive() 之后向其发出信号,从而确保发送线程在 rx 完成之前不会尝试再次发送。不确定如何检测通信故障、IIRC、Java 信号量等待没有超时:((

Rgds,马丁

关于java - 如何使用 UDF DatagramSockets 协调发送和接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6783011/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com