在PC上接收通过硬件发送的UDP数据,

时间:2015-02-24 07:00:36

标签: delphi udp delphi-xe indy10 hardware-interface

我开发了一个硬件(客户端,src ip 192.168.01.200:9652,des ip 192.168.01.100:9652),它回复来自pc的ARP和ICMP请求并发送UDP帧,我可以检查UDP帧, wireshark中的ARP和icmp回复以及所有这些框架都可以,但我无法在我的软件中收到任何内容,

在pc端(服务器)我设置了ip地址192.168.01.100并且我使用indy10编写了用于接收udp帧的delphi代码,然后我检查On_udp_read事件以接收数据但是这个事件永远不会发生,

sever(pc):

  udpserver.Active := True;
  binding:=udpserver.bindings.add;
  binding.IP:= '192.168.01.100'; // my computer IP
  binding.Port:=9652;

1 个答案:

答案 0 :(得分:1)

您需要设置Bindings集合之前激活服务器,而不是之后

//udpserver.Active := True;
binding := udpserver.Bindings.Add;
binding.IP := '192.168.01.100';
binding.Port := 9652;
udpserver.Active := True; // <-- move down here

如果激活服务器时Bindings集合为空,它将创建一个绑定到0.0.0.0(IPv4)或::1(IPv6)的默认项目{ {1}},默认为0。因此,除非事先设置TIdUDPServer.DefaultPort,否则最终会绑定到随机操作系统分配的端口,例如:

DefaultPort