2014-12-07 1 views
0

Java에서 TCP 서버 응용 프로그램이 있습니다. 클라이언트가 연결되면 연결에서 패킷을 읽으려고합니다. 그러나 클라이언트가 아무 것도 보내지 않은 경우에도 읽습니다. 내가 얻는 것은 0으로 초기화 된 바이트의 배열이다. 나는 소켓이 어떤 데이터가 올 때까지 기다리고, 결국 타임 아웃 할 것을 기대했다. 그러나 대신이 기능은 이상하게 작동합니다.
문제가 무엇이며 어떻게 해결할 수 있습니까?
는 여기가 소켓에서 읽는 방법은 다음과 같습니다Java 소켓이 이상하게 작동합니다.

byte bytes[] = new byte[25]; 
socket.getInputStream().read(commandBytes); 
+0

코드를 볼 수 있습니까? – Dima

+0

예. 내 게시물보기. – Pavol

답변

-1

.read는 읽은 바이트 수를 반환합니다. 버퍼를 사용하기 전에 확인해야합니다. 클라이언트가 데이터

+0

-1의 반환 값은 피어가 연결을 종료했음을 의미합니다. – EJP

+0

예. 데이터를 보내지 않고 연결을 닫습니다. – Dima

-1

내가 얻을 것은 0

에 의해 초기화 바이트 ARAY입니다 전송되지 않았습니다 귀하의 경우, 그것은 당신이 얻을 것은 반환하고, 의미, 아마, -1입니다 값은 읽은 바이트 수를 알려주는 read() 메서드의 값이거나 스트림 끝을 나타내는 -1입니다. 즉 피어가 연결을 종료했음을 나타냅니다. 이 값을 무시하면 코드가 올바르지 않습니다.

일부 데이터가 올 때까지 소켓이 대기하고 결국 시간 초과 될 것으로 예상됩니다.

타임 아웃을 설정하지 않으므로 시간 초과되지 않습니다. 데이터가 도착하거나 스트림이 끝날 때까지 차단됩니다.

그러나 대신이 기능은 이상하게 작동합니다.

기대 이상으로 이상한 점은 없습니다.