2012-05-24 66 views
0

我的Android應用程序在s.receive(p)處停頓,因爲它沒有收到任何數據包。Android接收來自相同IP地址的UDP數據包

我有X平面將數據包發送到同一IP地址中的隨機端口49059作爲我希望接收這些數據包的Android平板電腦。這是因爲他們正在運行相同的連接。 X-Plane使用端口49000發送數據包並使用49001接收數據包。我想不出什麼是錯的。我無法在Android平板電腦上使用3G,這是我可以測試的唯一互聯網連接。此外,清單中還啓用了所有互聯網和wifi權限。有任何想法嗎?這裏的代碼:

byte[] bar = new byte[1024]; 
DatagramPacket p = new DatagramPacket(bar, bar.length); 
DatagramSocket s = new DatagramSocket(49059); 
s.setSoTimeout(30000); 
s.receive(p); 

回答

0

如果你有wireshark,請嘗試檢查數據包是否由X平面發送。

此外,你說你的「應用程序凍結」,這不一定意味着數據包沒有被接收。我不知道你在做什麼,但也許你正在UI線程上執行接收/發送操作,這會導致應用程序凍結。

嘗試在s.receive(p)之後放置一個日誌,並檢查它是否出現在LogCat中。 Log.d("MYACT","Packet received");

+0

android平板電腦不需要發回數據包,所以它只接收。是的,它現在在UI線程中,只是爲了確保它的工作。它雖然沒有收到數據包,因爲我已經在s.receive(p)之後放了一個Log.d,但它沒有到達那裏。 「凍結」的意思是它在接收函數上停頓。 – lespommes

+0

我的意思是確保數據包的來源實際上是發送數據包。 而且是接收數據包的緩衝區大小(在你的情況下爲1024)是否足夠?另外,也請嘗試不同的端口,以防萬一。 如果你能澄清你的意思是「在相同的IP」 – Alabhya

+0

得到它的工作,謝謝你的幫助,Wireshark幫助確定問題(錯誤的IP),這將是有益的。 – lespommes