在 PC 中接收由硬件发送的 UDP 数据,
receiving UDP data in PC that send by hardware,
我开发了一个硬件(client,src ip 192.168.01.200 :9652, des ip 192.168.01.100 :9652),可以回复来自pc的ARP和ICMP请求并发送UDP帧,我可以检查UDP帧, ARP 和 icmp 在 wireshark 中回复,所有这些帧都正常,但我无法在我的软件中收到任何东西,
在 pc 端(服务器)我设置了 ip 地址 192.168.01.100 并编写了 delphi 代码用于使用 indy10 接收 udp 帧,然后我检查 On_udp_read 接收数据的事件但是此事件从未发生,
服务器(pc):
udpserver.Active := True;
binding:=udpserver.bindings.add;
binding.IP:= '192.168.01.100'; // my computer IP
binding.Port:=9652;
您需要在激活服务器之前设置Bindings
集合,而不是在之后:
//udpserver.Active := True;
binding := udpserver.Bindings.Add;
binding.IP := '192.168.01.100';
binding.Port := 9652;
udpserver.Active := True; // <-- move down here
如果在激活服务器时 Bindings
集合为空,它将创建一个绑定到 IP 0.0.0.0
(IPv4) 或 ::1
(IPv6) 的默认项TIdUDPServer.DefaultPort
,默认为 0。所以你最终会绑定到一个随机的 OS 分配的端口,除非你事先设置 DefaultPort
,例如:
udpserver.DefaultPort := 9652;
udpserver.Active := True;
我开发了一个硬件(client,src ip 192.168.01.200 :9652, des ip 192.168.01.100 :9652),可以回复来自pc的ARP和ICMP请求并发送UDP帧,我可以检查UDP帧, ARP 和 icmp 在 wireshark 中回复,所有这些帧都正常,但我无法在我的软件中收到任何东西,
在 pc 端(服务器)我设置了 ip 地址 192.168.01.100 并编写了 delphi 代码用于使用 indy10 接收 udp 帧,然后我检查 On_udp_read 接收数据的事件但是此事件从未发生,
服务器(pc):
udpserver.Active := True;
binding:=udpserver.bindings.add;
binding.IP:= '192.168.01.100'; // my computer IP
binding.Port:=9652;
您需要在激活服务器之前设置Bindings
集合,而不是在之后:
//udpserver.Active := True;
binding := udpserver.Bindings.Add;
binding.IP := '192.168.01.100';
binding.Port := 9652;
udpserver.Active := True; // <-- move down here
如果在激活服务器时 Bindings
集合为空,它将创建一个绑定到 IP 0.0.0.0
(IPv4) 或 ::1
(IPv6) 的默认项TIdUDPServer.DefaultPort
,默认为 0。所以你最终会绑定到一个随机的 OS 分配的端口,除非你事先设置 DefaultPort
,例如:
udpserver.DefaultPort := 9652;
udpserver.Active := True;