我需要每两秒重复发送4个字节,即00 00 00 F6
。
但是,IdUDPClient.SendBuffer
传输后没有返回。为什么对IdUDPClient.SendBuffer的调用不总是返回?
我尝试发送几个字节,并且每次都返回。
这工作:
UDP.SendBuffer(RawToBytes(#0 + #0 + #0 + #1 + #127 + #128 + #246, 7));
这不起作用:
UDP.SendBuffer(RawToBytes(#0 + #0 + #0 + #246, 4));
我已经失败尝试了许多的我已经在各种相关StackExchange发现问题的建议。
我看到至少三种情形:
- 悬挂,Wireshark的看到1个传输。
- 工作重复传输,但不包含4个字节的数据。
- 有时字节>
7F
以3F
发送。
有人能指出我做错了什么吗?
编辑:上面发生在一个线程中。如果TIdUDPClient
被放置为表单上的可见组件,那么它工作正常。
这可能是一个线程/重入问题?
请提供一个[最小,完整和可验证示例](/ help/mvce)来演示问题。此外,您正在滥用'RawToBytes()'。使用'Send()'而不是'SendBuffer()'。或者使用'IdGlobal。ToBytes()'。或者手动构建一个TIdBytes变量。 –
@Remy Lebeau我做了一个MCV向你展示,并且工作。感谢推动我清理。一定是线程问题。回到绘图板。 – AndersJ
@Remy Lebeau TidBytes变量的SetLength很容易忘记:-( – AndersJ