アンドロイド端末間でのTCP/IP通信について

6,006 views
Skip to first unread message

ニモ

unread,
Dec 3, 2010, 2:44:36 AM12/3/10
to 日本Androidの会

はじめまして。
Androidアプリの開発の勉強をしている学生です。

現在、エミュレータ間でTCP/IP通信を用いたチャットアプリの開発を行っています。
こちらをサーバとし、友人のパソコンをクライアントとしています。
しかし、serverSocket.accept();から先に進みません。

telnet localhost 5554
redir add tcp:ポート番号:ポート番号
は行っています。

また、パケットキャプチャで通信を見たところ、
クライアントからのSYNフラグは受信してるのですが、
サーバがRSTフラグを返してしまっています。

何か特別な設定などが必要なのでしょうか?

よろしくお願いします。

ohisamallc

unread,
Dec 4, 2010, 6:17:25 PM12/4/10
to android-g...@googlegroups.com
山形のohisamaです。
山形は、12月にしては暖かいです。

まず、エミュレータを実行している、パソコン内から
ブラウザかtelnetでサーバー動作を確認して
見ましょう。
更に、実機でも、確認しましょう。
躓き処としては、メジャーポート使ってませんか。

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られ

> います。
> このグループに投稿するには、android-g...@googlegroups.com にメール

> 送信してください。
> このグループから退会するには、
> android-group-j...@googlegroups.com にメールを送信してくださ

> 。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja

> らこのグループにアクセスしてください。
>
>
>

ニモ

unread,
Dec 6, 2010, 1:53:23 AM12/6/10
to 日本Androidの会

ありがとうございます。
動作を確認しながらデバッグしていきたいと思います。

メジャーポートとはウェルノウンポートのことでしょうか?
ポートには1024以上を使用しています。

鷹見純

unread,
Dec 6, 2010, 9:16:22 AM12/6/10
to android-g...@googlegroups.com
ニモ様

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 鷹見

ニモ

unread,
Dec 7, 2010, 3:19:45 AM12/7/10
to 日本Androidの会

大変わかりやすく教えていただきありがとうございます。
無事にTCP/IP通信を行うことができました。

手順を参考にしたところ上手くできました。
私だけでは解決できなかった問題なので非常に助かりました。

Reply all
Reply to author
Forward
0 new messages