0

所以,我正在调试模式下在我的手机(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 上用手机测试过)?

PS我知道HTC Legend有wifi问题,这就是我使用3G的原因......

4

1 回答 1

0

如果您通过 3G 连接时服务器显示的 IP 地址与移动设备不同,则您可能位于 NAT 网关后面。一些手机运营商会这样做。NAT 的一个明确标志是 IP 看起来像10.x.x.xor192.168.x.x172.y.x.x(在y16 和 31 之间)。我还看到运营商分配 NAT 地址的形式1.x.x.x

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

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

于 2013-09-05T14:48:12.703 回答