我有一个使用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
答案 0 :(得分:0)
在UDP中,您无法假设响应按照与发送请求相同的顺序到达,或者根本不会,并且您也不能假设它们只到达一次。
你必须在两者中使用序列号,以匹配它们,否则没有任何待处理的请求,并继续发出请求,直到你得到它的响应,然后你仍然必须以某种方式处理重复。
注意:您需要重新创建DatagramPacket
或者至少每次在读取循环周围重置其长度:否则它可以保持缩小到目前为止收到的最小数据报的大小。