연결이 실패하는 경우, 모드얼마나 많은 데이터가 전송 되었습니까?
bytesTransferred = fileIChannel.transferTo(0, fileIChannel.size(), socketChannel);
// or using a buffer
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(1024*8);
while (fileIChannel.read(byteBuffer) != -1) {
byteBuffer.flip();
bytesTransferred += socketChannel.write(byteBuffer);
byteBuffer.clear();
블로킹 소켓을 통해 파일을 전송, 나는 전송 된 바이트의 수를 유지해야합니다. 특정 바이트 수를 받으면 서버에서 응답 할 때까지 기다리면됩니다. 또는 연결이 복원되면받은 바이트 수를 요청합니다. 다음 중 올바른 옵션을 선택해주세요 (복수 선택 가능). 이 문제는 보통 어떻게 해결됩니까?
두 번째 질문입니다. 소켓을 통해 대용량 데이터를 전송할 때 데이터 무결성이 보장됩니까?
코드가 어떤 생각을하고 있는지 잘 모르겠습니다. 당신은 단지 -1과 비교해서는 안됩니다 ... 그러나 실제로 얼마나 많은 비트가 읽혔는지보십시오. 그 수는 read() 호출마다 달라질 수 있기 때문입니다. 그리고 예, TCP 계층은 약간의 오류 탐지를 수행합니다. 당신은 쉽게 자신을 연구 할 수 있어야합니다. – GhostCat
@GhostCat 감사합니다. 'flip()'메소드는 실제로 읽은 데이터의 수를 limit로 설정합니다. –