ニモ様
ServerSocketを使用しての通信をエミュレータでテストしたことがありますので紹介します。
テストするために,クライアントにはtelnetを使用しました。
ネットワークの接続は
エミュレータのあるPCのtelnet(クライアント) -> エミュレータ(サーバ)
です。
ポートは9999を使用しているとした場合,次のようにして通信の確認を行っています。
1. エミュレータの起動
2. ポートフォワード( "adb forward tcp:9999 tcp:9999" でポートをフォワードしておく)
3. テストプログラムの起動し,listen待ちまで処理を進めておく(接続待ち,acceptで待っている状態)
4. デバイスの接続確認 '("adb devices"で使用可能デバイスの確認)
5. ポートフォワード( "adb forward tcp:9999 tcp:9999" でTポートをフォワードしておく)
6. PCにて telnetによる接続確認 ( "telnet 127.0.0.1 9999" で接続し,データの送信/受信を行う)
でテストできます。
使用しているテストプログラムは開示できますので,必要なら個人メールあてに連絡してください。
おまけ
SYNに対してRSTが返る場合,サーバがListne待ちしていないときです。
adb shell netstat
コマンドを使用してみてください。
以下は,サーバがポート9999を使用して,acceptを実行している場合です。
ポート9999がListen待ちしていることがわかります。
adb shell netstat
Proto Recv-Q Send-Q Local Address Foreign Address State
ttcp 0 0
127.0.0.1:5037 0.0.0.0:* LISTEN
tcp 0 0
0.0.0.0:9999 0.0.0.0:* LISTEN
tcp 0 0
0.0.0.0:5555 0.0.0.0:* LISTEN
この状態で,telnetを実行するとacceptが終了し,最終行で示したようにポート9999がEstablishedになり,接続が成功したことがわかります。
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0
127.0.0.1:5037 0.0.0.0:* LISTEN
tcp 0 0
0.0.0.0:9999 0.0.0.0:* LISTEN
tcp 0 0
0.0.0.0:5555 0.0.0.0:* LISTEN
tcp 0 0
127.0.0.1:9999 127.0.0.1:52148 ESTABLISHED
tcp 0 0
10.0.2.15:5555 10.0.2.2:49385 ESTABLISHED
tcp 0 0
127.0.0.1:52148 127.0.0.1:9999 ESTABLISHED
by 鷹見