Android UDP通过3G或WiFi接收电话

时间:2013-09-05 13:40:36

标签: java android sockets udp 3g

所以,我正在调试模式下在手机(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的原因.....

1 个答案:

答案 0 :(得分:0)

如果通过3G连接时服务器显示的IP地址与移动设备不同,则可能是NAT网关的后面。一些细胞载体这样做。 NAT的确定标志是IP看起来像10.x.x.x192.168.x.x172.y.x.x(其中y介于16和31之间)。我还看到运营商分配了1.x.x.x形式的NAT地址。

通过这样的设置,它取决于网关如何处理UDP。

要排除NAT造成的任何错误,请尝试通过WiFi和LAN访问服务器,而不是通过任何您无法控制的网络。