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의
것은 첫째, 장치/에뮬레이터 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
IP 주소는 괜찮습니다. 개발 컴퓨터에서 간단한 서버 소켓 응용 프로그램을 만들어 테스트했습니다. 데이터가 성공적으로 수신되었고 응답 문자열이 전송되었습니다. 그러나 안드로이드 응용 프로그램은 여전히 응답 수신에 붙어 있습니다. –