为什么对IdUDPClient.SendBuffer的调用并不总是返回?

时间:2017-02-11 22:51:51

标签: delphi indy indy10 delphi-6

我需要每两秒重复发送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问​​题中尝试了许多建议,但未成功。

我至少看过三种情景:

  1. 悬挂,Wireshark看到1次传输。
  2. 工作重复传输,但不包含4个字节的数据。
  3. 有时字节> 7F3F发送。
  4. 有人可以指出我做错了吗?

    编辑:以上内容发生在一个帖子中。如果将TIdUDPClient作为可见组件放在表单上,​​那么它可以正常工作。

    这可能是一个线程/重入问题???

1 个答案:

答案 0 :(得分:0)

看到更多代码肯定有帮助,你确定你的线程实际上正在运行(调用Execute),否则你的代码不会运行,显然:)

在可见表单上使用TIdUDPClient组件时的区别在于它是自动处理的(构造函数由delphi设计器自动运行)

    TIdUDPClient.Create(AOwner: **)

通过这样做,组件将在主线程上运行(如果你愿意,可以使用“GUI线程”)

我建议你做的一些事情是为了追捕它:

首先确保线程正在执行

问题也可能是TIdUDPClient没有拥有者,如果在线程内部使用TIdUDPClient.Create(nil)进行实例化,请尝试使用TThread或Application

实例化int
    TIdUDPClient.Create(Self)

    TIdUDPClient.Create(Application)

希望这会有所帮助,但正如我所说,发布更多代码绝对可以让我帮助你!