我需要每两秒重复发送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问题中尝试了许多建议,但未成功。
我至少看过三种情景:
7F
以3F
发送。 有人可以指出我做错了吗?
编辑:以上内容发生在一个帖子中。如果将TIdUDPClient
作为可见组件放在表单上,那么它可以正常工作。
这可能是一个线程/重入问题???
答案 0 :(得分:0)
看到更多代码肯定有帮助,你确定你的线程实际上正在运行(调用Execute),否则你的代码不会运行,显然:)
在可见表单上使用TIdUDPClient组件时的区别在于它是自动处理的(构造函数由delphi设计器自动运行)
TIdUDPClient.Create(AOwner: **)
通过这样做,组件将在主线程上运行(如果你愿意,可以使用“GUI线程”)
我建议你做的一些事情是为了追捕它:
首先确保线程正在执行
问题也可能是TIdUDPClient没有拥有者,如果在线程内部使用TIdUDPClient.Create(nil)进行实例化,请尝试使用TThread或Application
实例化int TIdUDPClient.Create(Self)
或
TIdUDPClient.Create(Application)
希望这会有所帮助,但正如我所说,发布更多代码绝对可以让我帮助你!