Java数据报发送和接收不保持同步

时间:2015-12-02 22:53:12

标签: java udp datagram

我有一个使用UDP数据报回复命令的设备。我试图想出一种方法来保证响应来自特定的请求。当我运行以下代码时,我得到前两个,有时是第三个请求,然后它就会挂起并超时接收。我尝试了几种不同的方法来解决它(因此同步和iQueuePointer接收超时)。以下是一个运行示例:

show

以下是代码:

Listening for X-Air responses
Sending X-Air requests
Servicing request 6
Send loop - bWait=true request.size=6 iQueuePointer=6
/info,ssssV0.04XR12-24-00-6EXR121.10 from 6
Removed 6
Servicing request 5
Send loop - bWait=true request.size=5 iQueuePointer=5
/ch/01/config/name,sPreach Mic from 5
Removed 5

1 个答案:

答案 0 :(得分:0)

在UDP中,您无法假设响应按照与发送请求相同的顺序到达,或者根本不会,并且您也不能假设它们只到达一次。

你必须在两者中使用序列号,以匹配它们,否则没有任何待处理的请求,并继续发出请求,直到你得到它的响应,然后你仍然必须以某种方式处理重复。

注意:您需要重新创建DatagramPacket或者至少每次在读取循环周围重置其长度:否则它可以保持缩小到目前为止收到的最小数据报的大小。