2

現在、私はサーバー/クライアント プログラムを作成して、ユーザーがその場で Android フォンからコンピューターのさまざまな部分を制御できるようにしています。サーバーはコンピューター上で実行され、クライアントは Android フォンから実行されます。これを行うためにソケットプログラミングを使用しています。コンピューターでは WinSocket を使用し、電話では Android/Java ソケットを使用しています。

機能するもの:

  1. コンピュータ側のサーバーは動作します。
  2. 同じ Wi-Fi ネットワーク上にある場合、電話のクライアントはサーバーとの間でコマンドを送受信できます。
  3. サーバーは、接続先のローカル ワイヤレス ネットワークの外部からアクセスできます。このオープンポートチェックツールを使用してサーバーにリクエストを送信することで、これをテストしました。サーバーはリクエストを正常に受信でき、ポート チェック Web サイトは、使用しているポートが適切に転送されていることを報告します。
  4. Android フォンで開いているポートをテストするアプリを使用すると、サーバーは 3G/4G 経由で接続要求を取得します。

今私の問題のために。電話のクライアントからコンピューターで実行されているサーバーに接続しようとすると、電話が 3G または 4G 経由でインターネットに接続されている場合、ソケットは何もせず、ソケット タイムアウト例外をスローし、サーバーは何も受信しません。電話からの接続要求。上記の4番目のように、使用したポートチェックアプリはサーバープログラムを通過できるため、これを理解できませんが、以下に投稿するコードは3G / 4Gで実行すると何もしません.

String hostName = "SERVER_NETWORK_EXTERNAL_IP_HERE";
int port = 58587;
SocketAddress address = new java.net.InetSocketAddress(hostName, port);
sock = new Socket();
sock.connect(address, 5000);

画面上部のステータス バーにあるネットワーク アクティビティ インジケーターは、このコードを実行するとアウトバウンド ネットワーク アクティビティを報告しませんが、wifi に接続している場合はすべて正常に動作します。誰でもアイデアはありますか?

4

0 に答える 0