2011-10-07 5 views
0

파일을 허용하고 DataInputStream 및 BufferedInputStream을 사용하여 특정 디렉토리에 파일을 작성하는 서버를 작성하려고합니다.java network-broken pipe 및 수신 된 파일이 손상되었습니다.

서버는 '각 파일의 크기 (긴)'및 '해석되지 않은 바이트의 내용 (바이트 [바이트 수] ]) '

그리고 모든 것이 성공적이면 부울 값을 보내야합니다.

하지만 문제는 파일을 올바르게 수신하지 못한다는 것입니다.

수시로 '깨진 파이프'오류 메시지가 나타나거나 파일을받은 후 파일이 손상되었습니다. 문제가 해결

..

문제에 관련이있을 수 있습니다
+0

가능한 복제 [java.net.SocketException의 문제를 해결하는 방법 : 브로큰 파이프 (http://stackoverflow.com/q/2309561/851811) –

답변

3

하나 개의 작은 것은. 대신 바이트의 수, 실제로 읽은 바이트 수에 의해 파일 크기 변수를 감소시키는해야하는 것은 읽을 수 요청 :

 while(fileSize>0){ 
      if(fileSize < byteSize) 
       byteSize = (int)fileSize; 
      int byteRead = din.read(b, 0, byteSize); 
      fos.write(b); 
      fileSize -= byteRead; // <-- See here 
     } 
+0

를 + 1 이것이 오류 뒤에 숨겨진 실제 문제 일 수 있습니다. 필요한 것보다 적은 바이트를 읽는다면 이것은 프로그램이 while 루프를 조기에 빠져 나오게하여 다음 파일 길이를 잘못 가져올 수 있습니다. 이렇게하면 더 이상 데이터가 없을 때 입력 스트림을 계속 읽을 수 있습니다. –

+0

또한 'byteRead' 결과를 확인하고 매번 버퍼 배열 전체를 출력에 쓰지 않고 실제로 읽은 바이트 수만 써야합니다. 그렇지 않으면 읽기 데이터 섹션을 출력에 두 번 쓸 수 있습니다. – Gandalf

+0

내 문제가 해결되었습니다! 고맙습니다!! –

0
입력을 읽을 때, 보낸 사람이 닫힙니다 경우이 오류가 될 수

연결. 코드와 아무 관련이 없습니다. 보낸 사람이 시간 초과되었거나 전송이 완료되기 전에 연결을 닫았을 수 있습니다.

이 관련 문제를 살펴 보자 : How to fix java.net.SocketException: Broken pipe?

관련 문제