gpt4 book ai didi

Delphi Indy IdUdpClient读取操作,无数据返回

转载 作者:行者123 更新时间:2023-12-02 06:16:48 25 4
gpt4 key购买 nike

我需要读取电子设备发送的信息(使用UDP协议(protocol))。我在 Delphi 7 中使用 Indy 组件(版本 9)时遇到问题。您可以在下面看到我的代码。

procedure TForm1.Button1Click(Sender: TObject);
var
buffer: Array of Byte;
bytes_received: integer;
begin
SetLength(buffer, 36);
IdUDPClient1.Host:='192.168.1.1';
IdUDPClient1.Port:=49152;
IdUDPClient1.BufferSize:=36;

IdUDPClient1.Active:=True;
IdUDPClient1.ReceiveTimeout:=50;
bytes_received:=IdUDPClient1.ReceiveBuffer(buffer,Sizeof(buffer));
IdUDPClient1.Active:=False;
end

“bytes_received”的输出值为0,显然,“buffer”内容不是我所期望的......我做错了什么?

提前致谢,

伊曼诺

最佳答案

使用TIdUDPClient按照您的方式,您正在远程 192.168.1.1:49152 之间创建静态关联。对以及 TIdUDPClient 的任何随机本地 IP/端口对绑定(bind)到.仅从 192.168.1.1:49152 发送的数据包可以接收到该 IP/端口。设备需要知道将其数据包发送到哪里,并且您需要在它们发送到的 IP/端口上接收它们。我不记得是否是 TIdUDPClientBoundIPBoundPort Indy 9 中的属性,但 Indy 10 中也有。

ReceiveTimeout以毫秒表示。即使您有 TIdUDPClient如果设置正确,50ms 是非常短的等待数据到达的时间,因此 ReceiveBuffer()可能只是超时。尝试使用更大的超时值,至少几秒钟。

或者,使用TIdUDPServer反而。设置其Bindings属性与您想要接收数据的本地 IP/端口对,然后让它 OnUDPRead每当有新数据从任何远程 IP/端口到达时,事件都会通知您。

关于Delphi Indy IdUdpClient读取操作,无数据返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10550440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com