Androidエミュレーター(QEMU)は、特定のTCP接続を許可していません(RST、ACK Synへの回答として)
-
12-10-2019 - |
質問
インターネットブラウジングはエミュレータで機能しますが、エミュレータでも実行されている私のアプリは、TCPを介してポート5222のインターネット上のサーバーに接続することができません。私は、ルーターやPCに関係するファイアウォールが関係していないことをかなり確信しています。PCからのIP:ポートにテルネットできるからです。
これは、エミュレータで撮影されたパケットトレースのスクリーンショットです。 http://i.stack.imgur.com/siffm.png
エミュレートされたデバイスのパケットトレースは、その特定のポートのすべてのSynパケットがRSTで回答され、ACKが「接続エラー」でアプリによって接続が閉じられることを示しました。
エミュレータがこれらのポートをブロックするのはなぜですか?どうすれば変更できますか?
解決 2
とった。として http://developer.android.com/guide/developing/tools/emulator.html#proxy 州、環境変数に設定されたプロキシhttp_proxyが使用されます すべてのTCP接続。しかし、私のプロキシは、特定のTCPポートのみを許可するように構成されています。
unset $http_proxy
または使用します
emulator -http-proxy none
(「なし」は正しいプロキシではないので、エラーメッセージが得られます。しかし、少なくとも環境変数は処理されません)
PS:
-http -proxyコマンドが提供されていない場合、エミュレータはhttp_proxy環境変数を検索し、上記の形式に一致する値を自動的に使用します。
グーグル、それはクレイジーです。 HTTP(s)トラフィックがそのプロキシを通過するためのトラフィックが不要なため、http_proxy環境変数を設定しました。いいえ すべてのTCP接続.
他のヒント
エミュレータは独自のネットワークで実行されるため、さまざまなポートを通信したい場合は、標準以外のポートの転送を正しくセットアップする必要があります。
エミュレータで実行されているアプリケーションに接続する外部アプリケーションが必要な場合は、外部アプリケーションが開発マシンのポートに接続し、エミュレータが10.0.2.15に接続を転送するように転送をセットアップする必要があります。エミュレーターアドレス。
詳細については、開発ガイドを参照してください。
http://developer.android.com/guide/developing/tools/emulator.html#connecting