2

私はクライアントサーバーアプリをプログラミングしています。クライアントはAndroidフォンで、サーバーはラップトップです。

だから私の問題は、この1行のコードです:

Socket connectionToServerSocket = new Socket(hostName, portNumber);

携帯電話が自宅のwifi接続でインターネットに接続している場合は完全に正常に動作し、3G(携帯プロバイダー)を介して接続するとタイムアウトするだけです。たとえば、しばらくブロックしてからタイムアウト例外がスローされます。

ファンキーなことは、(OS モニターを使用して) 一部のアプリがポート #80 などの非常に一般的なポートを介して接続されていることを確認できることですが、ポート番号 (およびサーバーがリッスンしているポート) を 80 に切り替えることはできません。助けにはなりません (例: それでもタイムアウトします)。多くの異なるポートを試しましたが、結果は同じでした。

DNS は正常に動作します (たとえば、hostName に指定した論理文字列を正しい IP に変換します) が、サーバーに何も送信しません... 道に迷ったのですが、何が原因でしょうか? どのように確認して解決できますか?

4

3 に答える 3

0

ケース 1:ラップトップと電話が Wi-Fi に接続されている場合に機能しますか?

これを一度お試しください

ケース 2 :

  1. 電話を 3G に接続します。
  2. 電話でホットスポットを有効にします。
  3. ラップトップを電話のホットスポットに接続します。
  4. ラップトップの IP が変更されている場合は確認し、Socket オブジェクトの IP を置き換えます。Socket connectionToServerSocket = new Socket(newIP, portNumber);
  5. プロジェクトを実行します。

私が言おうとしていることを理解したら、これを試してみてください。

サービスを提供しているサーバーに外部ネットワークから到達できないため、タイムアウト例外が発生しています。

これが役立つことを願っています:)

于 2016-05-02T06:59:08.043 に答える
0

その理由は、ラップトップのサーバーがデフォルトで外部ネットワークに対して閉じられているためです。ポート転送と呼ばれるものを行う必要があります *注: ポート転送はサーバーをサイバー セキュリティのリスクにさらします。正しく行うようにしてください。サーバーを安全に保つための調整。

于 2016-05-02T07:06:10.740 に答える