마스터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");
						
						socket = new Socket(serverIP, serverPort);
						
						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 
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
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일 답변
...