안녕하세요. 안드로이드 개발을 배우고 있는 초보입니다.
소켓 통신을 위해 간단하게 버튼을 누르면 메시지를 보낼 수 있도록 책의 예제를 따라해보고 있는데요,
버튼을 눌러 소켓을 열게 하면 앱이 바로 죽어버리는 현상이 발생합니다.
같은 네트워크상에 두고, 방화벽 문제도 전혀 없구요.
로그캣 메시지는 다음과 같이 나타납니다.
11-22 05:21:36.594: D/AndroidRuntime(767): Shutting down VM
11-22 05:21:36.594: W/dalvikvm(767): threadid=1: thread exiting with uncaught exception (group=0x409961f8)
11-22 05:21:36.704: E/AndroidRuntime(767): FATAL EXCEPTION: main
11-22 05:21:36.704: E/AndroidRuntime(767): android.os.NetworkOnMainThreadException
11-22 05:21:36.704: E/AndroidRuntime(767): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1084)
11-22 05:21:36.704: E/AndroidRuntime(767): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:74)
11-22 05:21:36.704: E/AndroidRuntime(767): at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
11-22 05:21:36.704: E/AndroidRuntime(767): at libcore.io.IoBridge.connect(IoBridge.java:112)
11-22 05:21:36.704: E/AndroidRuntime(767): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
11-22 05:21:36.704: E/AndroidRuntime(767): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
11-22 05:21:36.704: E/AndroidRuntime(767): at java.net.Socket.startupSocket(Socket.java:566)
11-22 05:21:36.704: E/AndroidRuntime(767): at java.net.Socket.tryAllAddresses(Socket.java:127)
11-22 05:21:36.704: E/AndroidRuntime(767): at java.net.Socket.<init>(Socket.java:177)
11-22 05:21:36.704: E/AndroidRuntime(767): at java.net.Socket.<init>(Socket.java:149)
11-22 05:21:36.704: E/AndroidRuntime(767): at com.example.androidsocketcl.MainActivity.request(MainActivity.java:42)
11-22 05:21:36.704: E/AndroidRuntime(767): at com.example.androidsocketcl.MainActivity.access$0(MainActivity.java:39)
11-22 05:21:36.704: E/AndroidRuntime(767): at com.example.androidsocketcl.MainActivity$1.onClick(MainActivity.java:31)
11-22 05:21:36.704: E/AndroidRuntime(767): at android.view.View.performClick(View.java:3480)
11-22 05:21:36.704: E/AndroidRuntime(767): at android.view.View$PerformClick.run(View.java:13983)
11-22 05:21:36.704: E/AndroidRuntime(767): at android.os.Handler.handleCallback(Handler.java:605)
11-22 05:21:36.704: E/AndroidRuntime(767): at android.os.Handler.dispatchMessage(Handler.java:92)
11-22 05:21:36.704: E/AndroidRuntime(767): at android.os.Looper.loop(Looper.java:137)
11-22 05:21:36.704: E/AndroidRuntime(767): at android.app.ActivityThread.main(ActivityThread.java:4340)
11-22 05:21:36.704: E/AndroidRuntime(767): at java.lang.reflect.Method.invokeNative(Native Method)
11-22 05:21:36.704: E/AndroidRuntime(767): at java.lang.reflect.Method.invoke(Method.java:511)
11-22 05:21:36.704: E/AndroidRuntime(767): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
11-22 05:21:36.704: E/AndroidRuntime(767): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
11-22 05:21:36.704: E/AndroidRuntime(767): at dalvik.system.NativeStart.main(Native Method)




통신을 메인스레드에서 처리하셔서 발생하는 예외입니다.
통신부분을 따로 스레드를 돌려서 사용하세요.