私はクライアントサーバーアプリをプログラミングしています。クライアントはAndroidフォンで、サーバーはラップトップです。
だから私の問題は、この1行のコードです:
Socket connectionToServerSocket = new Socket(hostName, portNumber);
携帯電話が自宅のwifi接続でインターネットに接続している場合は完全に正常に動作し、3G(携帯プロバイダー)を介して接続するとタイムアウトするだけです。たとえば、しばらくブロックしてからタイムアウト例外がスローされます。
ファンキーなことは、(OS モニターを使用して) 一部のアプリがポート #80 などの非常に一般的なポートを介して接続されていることを確認できることですが、ポート番号 (およびサーバーがリッスンしているポート) を 80 に切り替えることはできません。助けにはなりません (例: それでもタイムアウトします)。多くの異なるポートを試しましたが、結果は同じでした。
DNS は正常に動作します (たとえば、hostName に指定した論理文字列を正しい IP に変換します) が、サーバーに何も送信しません... 道に迷ったのですが、何が原因でしょうか? どのように確認して解決できますか?