我需要读取电子设备发送的信息(使用UDP协议)。我在使用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,显然,“缓冲”内容不是我所期望的......我做错了什么?
提前致谢,
了Imanol
答案 0 :(得分:3)
使用TIdUDPClient
的方式,您将在远程192.168.1.1:49152
对与TIdUDPClient
绑定的任意随机本地IP /端口对之间创建静态关联。只能接收从192.168.1.1:49152
发送到该IP /端口的数据包。设备需要知道将数据包发送到哪里,您需要在发送到的IP /端口上接收它们。如果{9}在Indy 9中TIdUDPClient
具有BoundIP
和BoundPort
属性,我不会立即回想起来,但它确实存在于Indy 10中。
ReceiveTimeout
以毫秒表示。即使您TIdUDPClient
设置正确,50毫秒是等待数据到达的非常短的时间,因此ReceiveBuffer()
可能只是超时。尝试使用更大的超时值,至少需要几秒钟。
或者,请改用TIdUDPServer
。使用要接收数据的本地IP /端口对设置其Bindings
属性,然后让其OnUDPRead
事件在任何远程IP /端口到达新数据时告诉您。 / p>