2015-04-03 61 views
-1

我的代碼無法接收來自外部網絡外部的UDP消息。通信是在Android和Java計算機應用程序之間進行的,在我的局域網內部使用IP(例如192.168.0.3)代碼起作用,如果我將我的Java計算機應用程序放入我的在線服務器(顯然,我使用外部IP更改了每個IP)不工作; Android可以發送,但無法接收。Android UDP無法從外部局域網接收

的Android代碼:

@Override 
protected Integer doInBackground(Void... params) { 
    DatagramSocket socket = null; 
    byte[] buf = new byte[1024]; 
    DatagramPacket packet = new DatagramPacket(buf, buf.length); 
    try { 
     socket = new DatagramSocket(25565); 
    } catch (Exception e) { 
     Log.i("Ex ", ""); 
    } 
    while (true) { 
     try { 
      socket.receive(packet); 
      String message = new String(packet.getData(), 0,packet.getLength()); 
      Log.i("message", "" + message); 
     } catch (IOException e) { 
      Log.i("IO Ex", ""); 
     } 
     catch (Exception e){ 
     } 
    } 
} 

爪哇計算機應用程序代碼: http://pastebin.com/2hVGeP6R

+0

嘗試在寫入一些數據後調用套接字上的flash()方法。這將如下工作: - >發送數據到服務器 - > flush(告訴寫入完成) - >接收數據包。 – 2015-04-03 20:16:27

+0

@GiorgosOikonomou對不起,我不明白你的意思是「閃光()」 – user4747586 2015-04-03 20:18:41

+0

你有沒有嘗試過從另一個WiFi的應用程序?可能您的電話公司過濾了其中一個端口(因爲您使用它接收了25565)?您可以使用工具來觀察您的數據包是否已發送? – 2015-04-03 20:55:27

回答

1

192.168.0.X是一個內部NAT地址。任何網絡都可以使用它,但無法從外部任何地方訪問。您需要配置您的路由器將其傳遞到您的PC並點擊路由器的外部IP,否則您需要一個真實的網絡地址。

+0

這是一個例子。當應用程序在我的在線服務器中時,192.168.0.X被更改。這個地址在我的家裏,顯然在我的網絡之外,無法到達。 – user4747586 2015-04-03 20:16:36

+0

是的,但是您是否配置了路由器將數據從端口1500傳輸到PC? (在udp模式下) – 2015-04-03 20:20:26

+0

@FLefèvre我在我的電腦上測試了服務器代碼(處於接收模式),並且工作正常,所以問題與Android有關,而不是通信 – user4747586 2015-04-03 20:22:03

0

仔細閱讀this示例。我想你是在嘗試在打開時在同一個套接字中讀寫。如果它不工作,請粘貼更多代碼以幫助您

+0

我的Android發送到端口8並在25565接收,服務器接收到端口8併發送到端口25565 – user4747586 2015-04-03 20:27:12

+0

請粘貼您的完整代碼 – 2015-04-03 20:32:10

+0

Hum端口8低於1024,您是否以超級用戶身份啓動了您的程序?什麼是你的服務器端操作系統? – 2015-04-03 20:33:07