안녕하세요. 안드로이드 개발을 배우고 있는 초보입니다.


소켓 통신을 위해 간단하게 버튼을 누르면 메시지를 보낼 수 있도록 책의 예제를 따라해보고 있는데요,


버튼을 눌러 소켓을 열게 하면 앱이 바로 죽어버리는 현상이 발생합니다.


같은 네트워크상에 두고, 방화벽 문제도 전혀 없구요. 


로그캣 메시지는 다음과 같이 나타납니다.

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)


문제가 된 부분은 다음 부분이구요.

private void request(){
try {
Log.d(TAG,"Request Started");
Socket soc = new Socket("192.168.50.134",5004);
Log.d(TAG,"Client Started : 192.168.50.134, 5004");
ObjectOutputStream outstream = new ObjectOutputStream(soc.getOutputStream());
outstream.writeUTF("Hello");
outstream.flush();
Log.d(TAG,"Hello Sent");
ObjectInputStream instream = new ObjectInputStream(soc.getInputStream());
String inStr = instream.readUTF();
Log.d(TAG,"Server : " + inStr);
soc.close();
} catch (IOException e) {
e.printStackTrace();
}

}


혹시 저랑 비슷한 문제를 겪으셨던 분이나 잘 아시는 분 있으시면 답변 좀 부탁드립니다.