我开发了一个硬件(客户端,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;
答案 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