2016-05-02 8 views
2

私はクライアント・サーバー・アプリケーションをプログラミングしています。私のクライアントはアンドロイド・フォンで、私のサーバーは私のラップトップです。ソケット携帯電話が3Gに接続されているときにタイムアウトし、Wifiのときに動作します。なぜですか?

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

Socket connectionToServerSocket = new Socket(hostName, portNumber); 

完全に罰金作品私の携帯電話は私の自宅の無線LAN接続でインターネットに接続し、単にタイムアウトに3Gを介して接続(携帯電話プロバイダ)例えばそれはしばらくの間ブロックし、タイムアウト例外をスローします。

いくつかのアプリは非常に一般的なポート、たとえばポート#80で接続されていますが、ポート番号(およびサーバーが受信しているポート)を切り替えると、 〜80は助けにならない(例えばそれはまだタイムアウトします)、私は多くの異なるポートを試しました - 同じ結果。

DNSは正常に動作します(たとえば、hostNameに与えた論理文字列が正しいIPに変換されます)が、サーバには何も送信されません。 私は迷っています。どうすればそれをチェックして解決できますか?

+2

ラップトップのIPは公開されていますか(ネットワークの外部からアクセスできるなど)。携帯電話の3Gネットワ​​ークから到達できないプライベートIPが割り当てられているようです。ここに表示されているIPが、ソケットのホストIPとして使用しているIPと一致しているかどうかを確認してください:https://www.whatismyip.com/https://www.whatismyip.com/ –

答えて

0

この問題に似たようなアプリケーションを実行しました。

あなたのラップトップとIPフォンは、ルータを介してIPアドレスのルックアップを共有するため、同じネットワーク上で相互に接続できます。

デバイスがWIFIに接続されている場合、ルータのIPアドレスを確認するためにルーターを経由する要求が送信されます。ラップトップのIPアドレスを確認し、ラップトップのIPアドレスを見つけることができるためDNSに要求を保存します。ラップトップも同様に動作し、ルーターを介してクライアントのIPアドレスを検出します。

しかし、あなたの携帯電話が3G上にある場合、あなたのラップトップのIPアドレスがどこにあるかを正確に知る方法がありません。それがタイムアウトした理由です:ルーターから最寄りのDNS(正しいIPアドレスを解決しようとする場所)に移動します。一致するドメインまたはIPが見つからない場合、失敗します。

これを修正するいくつかの手順。 。 。

  1. ルータによっては、ラップトップのIPのポート転送を設定できます。つまり、ルータへの着信要求をラップトップのサーバ実装にパイプすることができます。

  2. ノートパソコンのIPアドレスを取得するには、http://touch.whatsmyip.org/のような任意のサイトにアクセスしてください。これを保存してクライアントに追加するソケットの設定。

  3. ラップトップサーバーがDNSルックアップで表示されるまでデバッグするには、クライアントコードに移動して追加します。

    ソケットdebugSocket = newソケット( "the.laptop.ip"、80);

いくつかの警告:

  • ルーターによっては、あなたのIPは178.12.434)ポート・フォワーディングで再起動
  • 中にあなたのIPアドレス、元と任意のブラウザを変更することがあります。

    • 専用サーバーが稼働したら、あなたは「your.domain.comに上記のIPパラメータを変更することができますドメインに登録:01は、パーソナル・サーバにあなたのラップトップ上に

    将来の変化を記録することができますあなたのサーバーへの実際のIPアドレスは、DNSルックアップによって見つけられます。

+0

"これらのIPアドレスは、ルータ。私はそれが何を意味するのかはわかりませんが、あなたの携帯電話とWi-Fiを使用しているときは、電話がまったく別のネットワーク上にあるという問題だけです。 Wi-Fiで、それはあなたのLANにあります。 3Gでは、携帯電話事業者のネットワーク上に着信接続を直接受信するかどうかが決まります。 – xaxxon

+0

私はいくつかの説明を追加しました、私はそれがより意味をなさないことを望みますxxxon :) –

+0

あなたの説明は何よりも混乱を引き起こす可能性があります..あなたのLAN上のIPアドレスに接続すると、ルータは宛先IPアドレスがルータが知っている範囲ローカルにルーティングします。私は "DNSへの要求を保存する"という意味を知らない。接続時にDNSエントリを変更するものはありません。また、 "それはルータを介してクライアントのIPアドレスを見つける"は奇妙です。つまり、ルータを通過するものはすべてありますが、ルータは必ずしもIPアドレスを見つけることとは関係ありません。あなたの答えには他にも多くの不正確さがあります。 – xaxxon

0

ケース1:ラップトップと携帯電話が無線LANに接続されていると機能していますか?

はこの一回

ケース2試してみてください。

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

私が言っていることを得ると、これを試してみてください。

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

これはそのための:)

0

理由は、あなたのラップトップでは、サーバーは、デフォルトでは外部ネットワークに閉じられていることであるのに役立ちます希望は、何をする必要があるポートは *テイクノートを転送と呼ばれるものです。ポートフォワーディングサーバーをサイバーセキュリティのリスクにさらす場合は、サーバーを安全に保つために適切な調整を行ってください。

関連する問題