2013-01-20 84 views
1

我想檢查一個遠程主機服務器是否接受特定端口上的UDP數據包。使用SocketServer,我可以建立一個TCP/IP連接並且工作,但我必須使用UDP。我沒有得到來自DatagramPacket與Java的響應

DatagramSocket ds; 
DatagramPacket dp; 
byte[] bytes = new byte[32]; 
InetAddress IAddress = new InetAddress.getByName("86.55.X.X");  

ds = new DatagramSocket(); 
ds.setSoTimeout(100); 
ds.connect(IAddress, 1122); 
ds.send(dp); 
ds.isConnected(); 
dp = new DatagramPacket(bytes, bytes.length); 
ds.receive(dp); 
ds.close(); 

它上面的代碼應該工作,我不知道如何測試它,因爲我沒有找到任何主機/軟其中/在那裏我可以運行/測試上面的代碼。我試圖在遠程主機上測試它。遠程主機禁用了Windows操作系統和防火牆。它有一個路由器,防火牆也被禁用。我可以訪問遠程服務器並在路由器中進行更改。我的問題是:如果只有打開的端口用於TCP/IP,遠程主機是否可以接受UDP數據包? (端口向前)。 在路由器控制面板中,我可以使TCP/IP端口轉發。

+0

使用測試吧'localhost'(127.0.0.1),這是你自己的電腦。您可以使用[Wireshark](http://www.wireshark.org/)來檢查網絡活動。 UDP是TCP/IP協議棧的一部分。 – m0skit0

+0

你在服務器上發生了什麼錯誤。我不認爲你需要使用連接()的UDP套接字..爲什麼你不能只使用發送(數據包).. – UDPLover

+0

如果你的場景是與NAT,遠程服務器後面的路由器/ NAT(與私人IP -10。*/172.xx。*/192.168。*),並且您沒有端口轉發UDP端口....無法工作。 – ggrandes

回答

1

你一定要試試localhost(在localhost上,你可以很容易地調試你的軟件,當收到某些東西時發生的事情)。

此外,您應該想要在端口上綁定DatagramSocket以接收數據包。發送時不需要連接DatagramSocket

+0

+1並且路由器必須配置爲允許UDP數據包。僅靠TCP是不夠的。 –

0

您需要將以下變量傳遞給你的JRE

java -Djava.net.preferIPv4Stack=true ... 
+0

爲什麼?我沒有看到任何證據表明這是問題。 – EJP