2011-01-12 9 views
1

"클라이언트"로 작동해야하는 "서버"및 Android 애플리케이션처럼 Java 데스크톱 애플리케이션이 있습니다.
"클라이언트"는 String을 보내고 "server"에서 응답 String []을 수신해야합니다. 유일한 방법은, 내가 건너 온 한 작업의 순서 (먼저 읽은 다음 응답을 쓰기)을 제외하고는 동일한 방식으로 구축이소켓을 통한 PC 대 데이터 교환

Socket socket = null; 
    try { 
     Log.d(log_tag, "creating socket"); 
     socket = new Socket("192.168.1.123", 8090); 
     Log.d(log_tag, "creating out"); 
     DataOutputStream out = new DataOutputStream(socket.getOutputStream()); 
     DataInputStream in = new DataInputStream(socket.getInputStream()); 
     Log.d(log_tag, "out created. sending data"); 
     out.writeUTF("sql"); 
     Log.d(log_tag, "data sent"); 
     Log.d(log_tag, "receiving data. loop"); 
     while(in.available() == 0); 
     Log.d(log_tag, "received = " + in.readUTF()); 
     out.close(); 
     in.close(); 
     socket.close(); 
     Log.d(log_tag, "all closed"); 
    } catch (UnknownHostException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    Log.d(log_tag, "finished"); 

"서버"와 같은 소켓을 사용하고 있습니다.

문제 :

while(in.available() == 0); 

때문에,의 InputStream이 준비가 되 결코 내가 서버 응답을받을 수없는 라인

에 안드로이드 응용 프로그램이 정지하지만, "서버는"데이터가 전송 된 것을보고합니다.
나를 실수로 지적 할 수 있습니까? (명백합니다. 그러나 나는 그것을 볼 수 없습니다)?
P. 어쩌면 그게 잘못된 방법 일 수도 있지만 여기서 중간 레이어를 사용하는 것은 아닙니다. 서버 코드도 수정할 수 없습니다. necropost의

+0

것은 첫째, 장치/에뮬레이터 192.168을 볼 수 있는지 확인 전혀 수신 할 수없는 빈 UTF 문자열을 전송했다 .1.123. 예를 들어 에뮬레이터에서 실행 중이며 192.168.1.123이 에뮬레이터를 호스팅하는 개발 시스템 인 경우 192.168.1.123이 작동하지 않을 수 있습니다. 대신 10.0.2.2를 사용해야합니다. http://developer.android.com/ guide/developing/tools/emulator.html # emulatornetworking – CommonsWare

+0

IP 주소는 괜찮습니다. 개발 컴퓨터에서 간단한 서버 소켓 응용 프로그램을 만들어 테스트했습니다. 데이터가 성공적으로 수신되었고 응답 문자열이 전송되었습니다. 그러나 안드로이드 응용 프로그램은 여전히 ​​응답 수신에 붙어 있습니다. –

답변

1

종류 :

문제는 "서버"코드에 있었다. 내 경우

그것은 (의 InputStream 뭔가를 잡기위한 적어도 하나 개의 공백 문자이어야 함)