2013-10-31 5 views
0

자바 소켓 프로그래밍을 배우려고하는데 InputStream의 읽기 기능에 문제가 있습니다. 처음에는 서버에 연결하기위한 소켓을 만들었습니다. 연결이 설정된 후 서버는 "연결이 설정되었습니다"라는 메시지를 다시 보내고 읽기 기능이 정상적으로 작동합니다. 그런 다음 서버에 바이트 메시지를 보내려고했지만 "in.read (buf)"행에 프로그램이 멈췄으므로 InputStream에서 데이터를 읽을 수 없습니다. 누구든지 나를이 문제를 어떻게 해결할 수 있는지 알려줄 수 있습니까?InputStream에서 데이터를 읽을 수 없습니다.

Socket client = new Socket("xxx.xxx.xxx.xxx", 45000); 
    InputStream in = client.getInputStream(); 
    OutputStream out = client.getOutputStream(); 
    for (int i = 0; i < 5; i++) { 
     byte[] buf = new byte[1024]; 
     int data_size = in.read(buf); 
     String msg = ""; 
     for (int j = 0; j < data_size; j++) { 
      msg += String.valueOf((char) buf[i]); 
     } 
     System.out.println(msg); 
     out.write(65); 
     out.flush(); 
    } 
+1

읽기가 멈추는 가장 일반적인 이유는 데이터를 보내지 못했기 때문입니다. 당신의 글쓰기 코드를 보여줄 수 있습니까? 적어도 5KB의 데이터가 전송되었음을 알고 있습니까? –

+0

http://www.javaworld.com/jw-12-1996/jw-12-sockets.html?page=3 – ajc

답변

1

InputStream.read()는 차단 호출입니다. 당신이 제공 한 코드를 감안할 때, 소켓에 쓰기 전에 소켓에서 읽으므로, 처음 읽는 것을 영원히 막을 것입니다. 적어도 시간 초과가 될 때까지.

-1

@Peter 맞을 수 있습니다. 또한 사용 후 스트림을 닫으면 예기치 않은 문제를 피할 수 있습니다.

+0

닫기 실패로 인해 읽지 못할 수 없습니다. – EJP

관련 문제