마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

소켓 생성시 예외발생하는 이유

0 추천

안드로이드(클라이언트)에서 소켓 생성시 예외발생하는 데 어디에서 문제가 생길 수 있는건가요 ?

 

/* 서버주소와 포트번호 설정 */
private static String serverIP = "192.168.0.8"; // 핸드폰이 연결하고 있는 와이파이 IP주소
private static int serverPort = 5555;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
     
    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
 
    listView = (ListView) findViewById(R.id.listview);
    messageView = (TextView) findViewById(R.id.title);
    addTextView = (EditText) findViewById(R.id.messageInput);
    conTextView = (EditText) findViewById(R.id.nameInput);
    setData();
 
    mAdapter = new MyAdapter(this, mList);
    listView.setAdapter(mAdapter);
 
    /** send 버튼 눌렀을 때 채팅창에 메세지 보이기 **/
    Button sendBtn = (Button) findViewById(R.id.send);
    sendBtn.setOnClickListener(new View.OnClickListener() {
 
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            msg = addTextView.getText().toString();
            if (msg != null && !msg.equals("")) {
                mAdapter.add(new MyData(userName, msg));
                addTextView.setText("");
            }
        }
    });
 
    /** connect 버튼 눌렀을 때 서버에 접속하기 **/
    Button connectBtn = (Button) findViewById(R.id.connect);
    connectBtn.setOnClickListener(new View.OnClickListener() {
 
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            userName = conTextView.getText().toString();
            Log.i(TAG_Connect, "onClick");
             
            if (userName != null && !userName.equals("")) {
                Log.i(TAG_Connect, "connect1");
                 
                try {
                     
                    Log.i(TAG_Connect, "connect2");
                     
                    <span style="color:#ff8c00;">socket = new Socket(serverIP, serverPort);</span>
                     
                    Log.i(TAG_Connect, "connect3");
                     
                } catch (IOException _IoExc) {
                        Log.i(TAG_Connect, "Exception");
                        closeSocket();
                }
                //ConnectToServer();
                conTextView.setText("");
                 
            }
        }
    });
 
     
} // onCreate()
 
/** 소켓 닫기  **/
private void closeSocket() {
    if(this.socket != null) {
        try {
            socket.close();
        } catch(Exception e) {
            this.socket = null;
        }
    }
}
 
private class ClientThread extends Thread {
     
 
    public void run() {
        Log.i(TAG_Thread, "run() of ExampleThread object starts.");
        Log.i(TAG_Thread, "run() of ExampleThread object ends.");
    }
} //ClientThread class

서버는 자바로 만들었고, 클라이언트도 자바로 만들어서 실행시켰을 때 서버에서 문제는 없었습니다 .

서버가 잘되는지 확인하고 안드로이드를 실행시킨 것입니다.

서버도 포트번호를 5555로 열어두고 나서 안드로이드를 실행시켰습니다.

 

로그를 찍어보았는데 다음과 같이 나왔습니다.

 

08-21 15:37:01.799: D/AbsListView(5761): Get MotionRecognitionManager
08-21 15:37:01.809: D/AbsListView(5761): onVisibilityChanged() is called, visibility : 4
08-21 15:37:01.809: D/AbsListView(5761): unregisterIRListener() is called
08-21 15:37:01.834: D/AbsListView(5761): onVisibilityChanged() is called, visibility : 0
08-21 15:37:01.834: D/AbsListView(5761): unregisterIRListener() is called
08-21 15:37:01.919: D/libEGL(5761): loaded /system/lib/egl/libEGL_mali.so
08-21 15:37:01.919: D/libEGL(5761): loaded /system/lib/egl/libGLESv1_CM_mali.so
08-21 15:37:01.924: D/libEGL(5761): loaded /system/lib/egl/libGLESv2_mali.so
08-21 15:37:01.929: E/(5761): Device driver API match
08-21 15:37:01.929: E/(5761): Device driver API version: 23
08-21 15:37:01.929: E/(5761): User space API version: 23
08-21 15:37:01.929: E/(5761): mali: REVISION=Linux-r3p2-01rel3 BUILD_DATE=Fri Nov 29 14:18:37 KST 2013
08-21 15:37:02.009: D/OpenGLRenderer(5761): Enabling debug mode 0
08-21 15:37:02.019: D/AbsListView(5761): unregisterIRListener() is called
08-21 15:37:02.064: D/AbsListView(5761): unregisterIRListener() is called
08-21 15:37:02.084: D/AbsListView(5761): unregisterIRListener() is called
08-21 15:37:02.314: D/AbsListView(5761): unregisterIRListener() is called
08-21 15:37:06.439: D/AbsListView(5761): unregisterIRListener() is called
08-21 15:37:06.829: D/AbsListView(5761): unregisterIRListener() is called
<span style="color:#ff8c00;">08-21 15:37:09.544: I/Connect(5761): onClick
08-21 15:37:09.544: I/Connect(5761): connect1
08-21 15:37:09.544: I/Connect(5761): connect2
08-21 15:37:09.554: I/Connect(5761): Exception</span>
08-21 15:37:09.564: D/StrictMode(5761): StrictMode policy violation; ~duration=10 ms: android.os.StrictMode$StrictModeNetworkViolation: policy=23 violation=4
08-21 15:37:09.564: D/StrictMode(5761):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1150)
08-21 15:37:09.564: D/StrictMode(5761):     at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
08-21 15:37:09.564: D/StrictMode(5761):     at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
08-21 15:37:09.564: D/StrictMode(5761):     at libcore.io.IoBridge.connect(IoBridge.java:112)
08-21 15:37:09.564: D/StrictMode(5761):     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
08-21 15:37:09.564: D/StrictMode(5761):     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
08-21 15:37:09.564: D/StrictMode(5761):     at java.net.Socket.startupSocket(Socket.java:566)
08-21 15:37:09.564: D/StrictMode(5761):     at java.net.Socket.tryAllAddresses(Socket.java:127)
08-21 15:37:09.564: D/StrictMode(5761):     at java.net.Socket.<init>(Socket.java:177)
08-21 15:37:09.564: D/StrictMode(5761):     at java.net.Socket.<init>(Socket.java:149)
08-21 15:37:09.564: D/StrictMode(5761):     at com.example.chatclient.MainActivity$2.onClick(MainActivity.java:98)
08-21 15:37:09.564: D/StrictMode(5761):     at android.view.View.performClick(View.java:4475)
08-21 15:37:09.564: D/StrictMode(5761):     at android.view.View$PerformClick.run(View.java:18786)
08-21 15:37:09.564: D/StrictMode(5761):     at android.os.Handler.handleCallback(Handler.java:730)
08-21 15:37:09.564: D/StrictMode(5761):     at android.os.Handler.dispatchMessage(Handler.java:92)
08-21 15:37:09.564: D/StrictMode(5761):     at android.os.Looper.loop(Looper.java:176)
08-21 15:37:09.564: D/StrictMode(5761):     at android.app.ActivityThread.main(ActivityThread.java:5455)
08-21 15:37:09.564: D/StrictMode(5761):     at java.lang.reflect.Method.invokeNative(Native Method)
08-21 15:37:09.564: D/StrictMode(5761):     at java.lang.reflect.Method.invoke(Method.java:525)
08-21 15:37:09.564: D/StrictMode(5761):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209)
08-21 15:37:09.564: D/StrictMode(5761):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025)
08-21 15:37:09.564: D/StrictMode(5761):     at dalvik.system.NativeStart.main(Native Method)
08-21 15:37:09.569: D/AbsListView(5761): unregisterIRListener() is called
08-21 15:38:09.819: W/IInputConnectionWrapper(5761): getTextBeforeCursor on inactive InputConnection
08-21 15:38:10.374: D/AbsListView(5761): unregisterIRListener() is called
08-21 15:38:10.379: D/AbsListView(5761): onVisibilityChanged() is called, visibility : 4
08-21 15:38:10.379: D/AbsListView(5761): unregisterIRListener() is called
08-21 15:38:11.109: W/IInputConnectionWrapper(5761): showStatusIcon on inactive InputConnection

socket = new Socket(serverIP, serverPort);

이처럼 소켓이 생성되기 전인 로그 connect2가 찍히고 난 후, catch문으로 넘어가드라구요.

이러면 소켓을 생성하지 못하는 건가요 ?

어떤 이유에서 예외가 발생하는 것인지 궁금합니다.

아니면 제가 무엇을 생각하지 못했거나, 빠드렸을 수 있을까요 ?

 

도움 주시면 감사하겠습니다!!

dmsruddl91 (250 포인트) 님이 2014년 8월 21일 질문

2개의 답변

+1 추천
 
채택된 답변
메인쓰레드에서는 소켓연결하면 안됩니다
alkyne (22,960 포인트) 님이 2014년 8월 21일 답변
dmsruddl91님이 2014년 8월 21일 채택됨
+1 추천
asynctask 로 검색하세요
쎄미 (162,410 포인트) 님이 2014년 8월 21일 답변
...