私は、データグラム プロトコルを使用してクライアントとサーバーのやり取りを行う携帯電話 (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 に設定されていました。
それで、私はその問題を解決できますか?