【问题标题】:receiving UDP data in PC that send by hardware,在 PC 中接收硬件发送的 UDP 数据,
【发布时间】:2015-02-24 07:00:35
【问题描述】:

我开发了一个硬件(客户端,src ip 192.168.01.200 :9652,des ip 192.168.01.100 :9652),从电脑回复 ARP 和 ICMP 请求并发送 UDP 帧,我可以检查 UDP 帧、ARP 和icmp 在wireshark 中回复,所有这些帧都正常,但我的软件中收不到任何东西,

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

服务器(PC):

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

【问题讨论】:

  • 我对 Delphi 一无所知,但请尝试将其设置为最后而不是第一个。

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


【解决方案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集合为空,则会在TIdUDPServer.DefaultPort上创建一个绑定IP0.0.0.0(IPv4)或::1(IPv6)的默认项,即0默认情况下。所以你最终会绑定到一个随机的操作系统分配的端口,除非你事先设置了DefaultPort,例如:

udpserver.DefaultPort := 9652;
udpserver.Active := True;

【讨论】:

  • 在我将它移到最后并禁用防病毒和 Windows 防火墙后,我无法再次在我的软件中接收 UDP 帧,当我检查“netstat -e”或“wireshark”时,我可以看到收到 udp 帧,netstat -e 显示计算机没有收到“未知协议帧”但收到“丢弃帧”,
  • 如果帧被丢弃,那么它们的目的地与任何活动套接字都不匹配。您可能还想使用 netstat 来验证您的 udp 服务器 IP/端口是否实际打开并处于侦听状态。
  • 我已经实现了我的硬件只回复 ARP 和 ICMP 并制作和发送 UDP 帧,
  • 我唯一能想到的另一件事是 UDP 数据包 (00:1e:68:4d:b7:b0) 上的目标 MAC 是否与 IP 192.168.1.100 的 NIC 上的 MAC 不匹配。你检查了吗?你可以使用ipconfig /all
  • 是的,匹配,我可以在两台电脑之间传输udp数据包,但我不能在硬件和电脑之间这样做,我不知道是什么问题,也许硬件应该回复一些先由pc发送的数据包,然后建立连接,
猜你喜欢
  • 2012-10-03
  • 2012-05-20
  • 1970-01-01
  • 2012-12-09
  • 2012-05-09
  • 2019-01-04
  • 2012-08-22
  • 1970-01-01
  • 2017-02-23
相关资源
最近更新 更多