2

私は、データグラム プロトコルを使用してクライアントとサーバーのやり取りを行う携帯電話 (j2me を使用) 用の単純なアプリケーションをコーディングしています。モバイル アプリケーションはサーバーにテキストを送信し、サーバーはそのテキストを標準出力に出力します。(携帯電話で) データグラムを送信するためのコードは次のとおりです。

String ip;
String port;
String msg;
//Loading ip, port and msg from the user input, I won't write it here, 'cause it
//does not matter

//Below is a simple code snippet for sending msg to the ip:port address
connection = (DatagramConnection) Connector.open(
        "datagram://" + ip + ":" + port);

Datagram datagram = connection.newDatagram(msg.getBytes(),
            msg.getBytes().length);
connection.send(datagram);

(PC を使用して) データグラムを受信するためのコードは次のとおりです。

DatagramSocket s = new DatagramSocket(7777);        
DatagramPacket p = new DatagramPacket(new byte[1024], 1024);

s.receive(p);
System.out.println(new String(p.getData()));

したがって、エミュレーターを使用して最初のコード スニペット (データグラムを送信するため) を起動すると、すべて正常に動作します。サーバーはデータグラムを正常に受信して出力します。しかし、データグラムを送信するためのプログラムを携帯電話から起動すると、データグラムはサーバーに届きません。

エミュレータを介してプログラムをテストする場合、IP アドレスはローカル ネットワークの IP であり、実際の携帯電話を介してテストする場合、IP はhttp://www.whatismyip.com/から取得されました。エミュレーターのテストに以前の IP を使用すると、データグラムもサーバーに到達しません。ポートは常に 7777 に設定されていました。

それで、私はその問題を解決できますか?

4

1 に答える 1

1

サーバーに到達するには、サーバーに実際のパブリック IP が必要です。プロキシ/ファイアウォールの背後にある場合、Java ME アプリが到達することはできません。

可能であれば、仮想化サービス (Amazon、Google など) でサーバーをホストしてみてください。

于 2012-09-09T11:43:48.580 に答える