2015-02-24 65 views
1

我開發了一個硬件(客戶端,src ip 192.168.01.200:9652,des ip 192.168.01.100:9652),它回覆來自pc的ARP和ICMP請求併發送UDP幀,我可以在wireshark中檢查UDP幀,ARP和icmp回覆,並且所有這些幀都可以,但是我不能在我的軟件中收到任何東西,在硬件發送的PC中接收UDP數據,

在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; 
+2

我一無所知德爾福,但嘗試設置激活它最後,而不是第一個。 – EJP 2015-02-24 08:46:24

回答

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上綁定IP 0.0.0.0(IPv4)或::1(IPv6),默認爲0。所以,你最終會結合隨機OS分配的端口,除非你設置DefaultPort事前,如:

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

我轉移到最後,也禁用防病毒和Windows防火牆,我不能再次在我的軟件接收UDP幀,當我檢查「netstat -e」或「wireshark」我可以看到收到的udp幀,netstat -e顯示計算機未收到「未知協議幀」但收到「丟棄幀」, – Sorena 2015-02-25 02:28:22

+0

如果幀被丟棄,則其目標不匹配任何活動套接字。您可能想要使用netstat來驗證您的udp服務器IP /端口是否實際打開並處於偵聽狀態。 – 2015-02-25 06:15:35

+0

我已經實現了我的硬件,只回復ARP和ICMP,併發送和發送UDP幀, – Sorena 2015-02-25 08:42:34