2013-09-05 104 views
0

因此,我在我的手機(HTC Legend)上以測試模式測試我的Android遊戲。我正在嘗試與我的自定義JAVA服務器進行通信。我可以在我的服務器上接收UDP包,我可以看到它們,但服務器的任何響應都不會到達電話。 我使用下面的代碼我的服務器上獲取客戶端IP:端口Android UDP通過3G或WiFi在手機上接收

datagramPackageIn.getAddress(); 
datagramPackageIn.getPort(); 

在我使用這個代碼在客戶端看到我的地址:

public String getLocalIpAddress() { 
     try { 
      for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { 
       NetworkInterface intf = en.nextElement(); 
       for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { 
        InetAddress inetAddress = enumIpAddr.nextElement(); 
        if (!inetAddress.isLoopbackAddress()) { 
         return inetAddress.getHostAddress().toString(); 
        } 
       } 
      } 
     } catch (SocketException ex) { 
      Log.e(TAG, ex.toString()); 
     } 
     return null; 
    } 

在測試中,我可以看到那些2地址是不同的。也許有問題?

我使用的標準UDP通信代碼(一個在模擬器工作)在客戶端:

run(){//simplified version 
while(true) 
packageIN() 
} 
public packageIN(){ 
DatagramPacket packet= new DatagramPacket(inBuffer, inBuffer.length); 
DatagramSocket socket= new DatagramSocket(receivingPort); 

socket.receive(); 
} 

因此,任何工作方案(在3G測試用一個電話)?

P.S. 我知道HTC Legend有wifi問題,這就是爲什麼我使用3G .....

回答

0

如果服務器在通過3G連接時顯示與移動設備不同的IP地址,則可能位於NAT網關後面。一些細胞攜帶者這樣做。如果IP看起來類似於10.x.x.x192.168.x.x172.y.x.x(其中y在16和31之間),NAT的確切標誌是。我也看到運營商分配的形式爲1.x.x.x的NAT地址。

這樣的設置取決於網關如何處理UDP。

要排除由NAT導致的任何錯誤,請嘗試通過WiFi和局域網訪問服務器,而不是通過任何您無法控制的網絡。

+0

正如我在我的問題所述,不能真正使用wifi,因爲已知的HTC wifi問題......但必須有一種方法...它不像使用udp協議不會使用NAT ... – klo

相關問題