【发布时间】:2017-02-11 22:51:51
【问题描述】:
我需要每两秒重复发送 4 个字节 00 00 00 F6。
但是,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 作为可见组件放在表单上,那么它可以正常工作。
这可能是线程/重入问题???
【问题讨论】:
-
请提供一个Minimal, Complete, and Verifiable example 来说明问题。另外,您在滥用
RawToBytes()。使用Send()而不是SendBuffer()。或使用IdGlobal.ToBytes()。或者手动构造一个TIdBytes变量。 -
@Remy Lebeau 我制作了一个 MCV 给你看,它奏效了。谢谢你催我清理。应该是线程问题。回到绘图板。
-
@Remy Lebeau SetLength 的 TidBytes 变量很容易忘记 :-(
标签: delphi indy indy10 delphi-6