0

だから、デバッグモードで自分の携帯電話(HTC Legend)でAndroidゲームをテストしています。カスタム Java サーバーと通信しようとしています。サーバーでUDPパッケージを受信できます。見ることはできますが、サーバーからの応答が電話に届きません。サーバーで次のコードを使用して、クライアント IP:port を取得しています

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 の電話でテスト済み)?

PS HTC Legend に Wi-Fi の問題があることは知っています。そのため、私は 3G を使用しています.....

4

1 に答える 1

0

3G 経由で接続するときに、サーバーがモバイル デバイスとは異なる IP アドレスを表示する場合は、NAT ゲートウェイの背後にいる可能性があります。一部の携帯通信会社はこれを行っています。10.x.x.xNAT の確実な兆候は、IP がor 192.168.x.xorのように見える場合です172.y.x.x(ここで、yは 16 から 31 の間です)。また、通信事業者が次の形式の NAT アドレスを割り当てているのを見たことがあります1.x.x.x

このような設定では、ゲートウェイが UDP を処理する方法によって異なります。

NAT によるエラーを除外するには、管理していないネットワークを経由せずに、WiFi と LAN を介してサーバーにアクセスしてみてください。

于 2013-09-05T14:48:12.703 に答える