所以,我正在调试模式下在手机(HTC Legend)上测试我的安卓游戏。我正在尝试与我的自定义JAVA服务器通信。我可以在我的服务器上接收UDP包,我可以看到它们,但服务器的响应都没有到达手机。 我在我的服务器上使用以下代码来获取客户端IP:端口
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;
}
在测试中我可以看到这两个地址是不同的。也许有问题?
我在客户端使用标准的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 :(得分:0)
如果通过3G连接时服务器显示的IP地址与移动设备不同,则可能是NAT网关的后面。一些细胞载体这样做。 NAT的确定标志是IP看起来像10.x.x.x
或192.168.x.x
或172.y.x.x
(其中y
介于16和31之间)。我还看到运营商分配了1.x.x.x
形式的NAT地址。
通过这样的设置,它取决于网关如何处理UDP。
要排除NAT造成的任何错误,请尝试通过WiFi和LAN访问服务器,而不是通过任何您无法控制的网络。