3

私はAndroid用のネットワークアプリを開発していますが、実際のAndroidデバイスをデスクトップコンピューターで実行されているデバイスエミュレーターに接続することに固執しています。

ルーターを使用してプライベートネットワークを作成したので、ファイアウォール/クローズドポートの問題を回避するために、ネットワークに接続されているのはPCと携帯電話だけです。

私のPCIPは192.168.1.100であり、各ネットワークノードの到達可能性を確認できるように相互にpingを実行しようとしています。pingは、PC(エミュレーターコンソールではない)から電話まで正常に機能します。

問題は、PC自体ではなく、携帯電話からPCエミュレーターにpingを実行したいということです...そのために、エミュレーターコンソールを使用します...コンピューターのIPを使用する必要がありますか、それとも別のIPを使用する必要がありますか?ここで「10.0.xx」のようないくつかのIPを見てきましたhttp://developer.android.com/guide/developing/tools/emulator.html

しかし、それらは2つのエミュレーターを接続するためのものだと思いますよね?

その上、私はそれらをソケットで接続しようとし、エミュレータコンソールを介してポートのリダイレクトを作成しましたが、それでも接続できません。

手がかりはありますか?ありがとう!!

4

3 に答える 3

4

私はあなたに与えた初期の解決策を試しましたが、うまくいきませんでした。あなたが言ったように、おそらくその理由は、エミュレータコンソールのredirコマンドがローカルホストから来るパケットのみをリダイレクトするためです。

そこで、単純なプロキシサーバーを検索し、同じマシンで使用してテストしました。

http://www.java2s.com/Code/Java/Network-Protocol/Asimpleproxyserver.htm

これで、次の構成を使用しました。

プロキシ上:

String host = "localhost";
int remoteport = 3000;
int localport = 4000;

次に、エミュレータインスタンスを実行します。

  • ポート2000でリッスンしているサーバーソケット。
  • telnetインスタンスを開き、「redir add tcp:3000:2000」を発行します

そして最後に、実際のデバイスで、ポート4000のマシンアドレスへのソケットを開きます。

したがって、ネットワークマップは次のようになります。

デバイス<->マシン:4000プロキシマシン:3000 <->:3000エミュレータ:2000->アプリケーション

これは、デバイスとエミュレーターで同じアプリケーションを使用して私のために機能しました。

于 2010-12-15T22:07:58.987 に答える
0

「rediraddtcp:port:newPort」を発行すると、エミュレータは最初のポート(ループバックに関連付けられている)のみを2番目のポートにリダイレクトするため、エミュレータはループバック(127.0.0.1)からのパケットのみを受信できるという結論に達しました。ポート(「エミュレーター仮想IP」に関連付けられています)。

PCに着信するすべてのパケットをIP127.0.0.1にリダイレクトするブリッジを作成しようとしましたが、それでも機能しません。したがって、エミュレータは他のエミュレータと通信するためだけに開発されたと思います...

ここに来る人は誰でも私と矛盾することを願っています。

于 2010-10-22T12:19:42.473 に答える
0

実際のデバイスをエミュレータインスタンスに接続できる場合があります。

エミュレートされたデバイスにリダイレクトを設定してから、Javaソケットを介して実際のデバイスを接続しようとしましたか?

例えば:

エミュレートされたデバイスで、ポート2000でリッスンしているサーバーソケットを開き、Telnet接続を開いて、次のコマンドを発行します。

redir add tcp:4000:2000

最後に、実際のデバイスのソケットをポート4000のマシンアドレス(192.168.1.100)に開きます。

于 2010-11-30T23:07:57.340 に答える