안드로이드 클라이언트

------------ 

 try {	socket = new Socket("192.168.42.194", 9999); 
	in = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 서버로부터의 입력 스트림
	out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); // 서버로의 출력 스트림
	String outputMessage;
	System.out.println("접속");    

	out.write("login_");
	System.out.println("쓰기");
	out.flush();
	System.out.println("전송");


					//	out.close();

						
	String inputMessage = in.readLine(); 
	System.out.println("IN__"+inputMessage);
	epw.setText(inputMessage);



	in.close();
	out.close();
	socket.close();
	 System.out.println("소켓 종료");
	} catch(Exception e) {
	System.out.println("err__"+e.getMessage());

 


---------

PC

--------------- 

try {
	listener = new ServerSocket(9999); 
	socket = listener.accept(); 
	System.out.println("연결됨");
	in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
	out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 

	String inputMessage;
	System.out.println("수신전");		
	inputMessage = in.readLine();
	System.out.println("수신후");

	System.out.println("in"+inputMessage);
	String outputMessage = "response"; 
	out.write("서버>" + outputMessage+"\n");
	out.flush()
		} catch (IOException e) {
		System.out.println(e.getMessage());


-------------------------


뭐 결국 그러니까


PC서버 생성

안드로이드 클라이언트 접속

안드로이드 클라이언트에서 서버로 메세지 전송

서버이서 클라이언트로 메세지접속


이란 간단한거인데...


문제는...

어플리케이션은 멈추고


서버에서는 중간의 "수신전"이 있는데서 멈춥니다.

"수신후"

까지 안가더군요.


그리고 클라이언트를 강제로 죽여버리면 수신 후와 받은 메세지가 그제서야 뜹니다.

일단 데이터 자체는 받았다는거 같은데....

더이상 오지 않을 데이터를 계속 받고 있는건지 뭔지...

e1.jpg


첨부 사진처럼 서버쪽은 일단 계속 돌아갑니다.



그리고 클라이언트 중간에 주석처리한

// out.close();

를 주석 풀어서 스트림을 닫아주면

로그캣에 catch문쪽에 들어간 메세지에서 Socket closed라는 메세지가 뜹니다.

er2.png


보다시피 서버쪽은 프로세스 자체도 죽어있고요




그리고 양쪽에서 서버->클라이언트로 보내는 부분을 제거해보면

정상적으로 통신을 마치는걸 볼 수 있습니다.


일단 구조상 문제는 없어보이는데....

대체 뭐가 문제인걸까요?