채팅 클라이언트에 보내는 옵션을 만들고 작은 파일을 처리 할 수 있었지만 큰 파일로 처리하려고 할 때 문제가 발생했습니다. 나는 그것을 해결하기 위해 시도하는 방법이었다 : 클라이언트 측 파일에서 읽고 보내DataOutputStream이 -1을 보내지 않습니다.
이while ((buf = bin.read(bytearray, 0, bytearray.length)) != -1) {
os.write(bytearray,0,bytearray.length);
}
bin.close();
"빈은"그냥 정수 "BUF"FileInputStream 객체에서 내 BufferedInputStream을하고, 운영 체제 내 DataOutputStream 정렬입니다. 서버 측, 수신 및 전송 :
의 정수이며, "도스"는 DataOutputStream 정렬 (가 모든 클라이언트에 대해이 작업을 수행) 클라이언트 측에서 파일을 수신은 "BUF"는데 DataInputStream이다 "에서"while ((buf = in.read(bytes, 0, bytes.length)) != -1) {
dos.write(bytes,0,bytes.length);
}
서버와 하드 드라이브에 기록 "에서"여기
int buf;
while ((buf = in.read(bytes, 0, bytes.length)) != -1) {
fos.write(bytes,0,bytes.length);
}
fos.close();
는의 DataInputStream이다 "FOS는"FileOutputStream 또는이다. 무슨 일이 일어날 때 첫 번째 클라이언트에서 보내기 단추를 누르면 서버와 클라이언트 모두 파일을 받기 시작하지만 두 번째 클라이언트 (수신기)를 닫을 때만 수신됩니다. 소켓이 닫히고 아마 그 때 실제로 파일 수신을 중단하고 파일 쓰기를 마치기로 결정합니다. 송신이 한번 실행되고 dataInputStream이 서버에서 비어 있어야하므로 "-1"이 발생하는 이유는 무엇인지 말해주십시오.
마지막 코드 스 니펫과 별도로 출력 스트림을 닫지 않는 것 같습니다. – biziclop
-1을 반환해야하는 메서드/개체는 무엇입니까? –
출력 스트림을 닫지 않을 것입니다. 왜냐하면 소켓을 닫으면 채팅 클라이언트가 끊어지기 때문입니다. – vejmartin