- ベストアンサー
Androidのソケット通信(初歩)
- Androidでソケット通信を行いたいなのですがエミュレータ環境でも実機環境でもうまく動作しません。
- 通常のJavaプログラム間でなら通信できるのですが、何かやり方が間違っているのでしょうか?
- 以下の単純なプログラムを使用しています。また、IP、Portは正しくファイアウォールも無効にしています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
投げられている例外名 NetworkOnMainThreadException でぐぐったらこんなページが出てきました。たぶんこれが原因でしょう。 http://garnote.com/2012/10/android-os-networkonmainthreadexception.html
その他の回答 (3)
- teketon
- ベストアンサー率65% (141/215)
No.3の方が回答している通り、スレッドを作成し、そのスレッドからソケットを作る必要があるようですね。
- teketon
- ベストアンサー率65% (141/215)
at java.net.Socket.startupSocket(Socket.java:566) at java.net.Socket.tryAllAddresses(Socket.java:108) at java.net.Socket.<init>(Socket.java:177) at java.net.Socket.<init>(Socket.java:149) これらは例外のスタックトレースなので、 そもそもこれらが発生した原因がIOExceptionのgetMessage()などから取得できるはずです。 単純に、e.printStacktrace()を行なってください。
- teketon
- ベストアンサー率65% (141/215)
例外メッセージ(IOExceptionの方)を取得し、表示した方がいいです。 そこ中に原因が書かれていませんか?
補足
at java.net.Socket.startupSocket(Socket.java:566) at java.net.Socket.tryAllAddresses(Socket.java:108) at java.net.Socket.<init>(Socket.java:177) at java.net.Socket.<init>(Socket.java:149) などが出ています。 IPが間違っている、あるいはサーバーがうまく機能していないのでしょうか? エミュレータがクライアントの場合、サーバーのIPは127.0.0.1か192.168.***.***(PCのIP)でいいのでしょうか?
補足
初心者ですみません。。 e.printStacktrace()の結果で FATAL EXCEPTION: main android.os.NetworkOnMainThreadException の後に at java.net.Socket.startupSocket(Socket.java:566) at java.net.Socket.tryAllAddresses(Socket.java:108) at java.net.Socket.<init>(Socket.java:177) at java.net.Socket.<init>(Socket.java:149) のログが続きます。