dポイントプレゼントキャンペーン実施中!

Androidでソケット通信を行いたいなのですが
エミュレータ環境でも実機環境でもうまく動作しません。
何かを送信するまでもなくソケット作成の時点で落ちてしまいます。

通常のJavaプログラム間でなら通信できるのですが、何かやり方が間違っているのでしょうか?

(1)PC側でJavaのサーバプログラムを起動しておく。
(2)Androidのエミュレータあるいは実機で起動
(3)Androidのボタンを押してソケット作成(下記プログラムが実行される)
(4)Android側が強制終了する

以下の単純なプログラムを使用しています。
また、IP、Portは正しくファイアウォールも無効にしています。

Socket socket = null;
try {
socket = new Socket("***.***.***.***", ****);
} catch (UnknownHostException e) {
System.err.println("Don't know about host");
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to host");
}

A 回答 (4件)

投げられている例外名 NetworkOnMainThreadException でぐぐったらこんなページが出てきました。

たぶんこれが原因でしょう。

http://garnote.com/2012/10/android-os-networkonm …
    • good
    • 0

No.3の方が回答している通り、スレッドを作成し、そのスレッドからソケットを作る必要があるようですね。

    • good
    • 1

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()を行なってください。

この回答への補足

初心者ですみません。。
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)
のログが続きます。

補足日時:2013/02/05 01:21
    • good
    • 0

例外メッセージ(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)でいいのでしょうか?

補足日時:2013/02/05 00:17
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!