QIODevice::Write의 QT 문서는 말한다 :QTcpSocket :: write - 대용량 파일을 작성하는 방법?
qint64 QIODevice::write(const char *data, qint64 maxSize)
장치에 데이터를 데이터의 대부분이 maxSize 바이트에 기록합니다. 실제로 쓴 바이트 수를 반환합니다. 오류가 발생하면 -1을 반환합니다.
하지만 온라인으로 발견 된 모든 코드 샘플은 다음과 같이를 사용하는 것 같다
QByteArray block;
... fill the block...
socket->write(block);
또는 내가 큰 파일을
QByteArray block;
... fill the block...
auto written_bytes = socket->write(block);
if(written_bytes < block.size())
throw error()..
가정하자 다음과 같이 (의 말을하자 2 GB) 첫 번째 또는 후자의 접근 방법을 사용해야합니까? TCP를 통해 단 하나의 청크에서 2GB를 전송할 수 있을지 의심 스럽습니다.
아니면 다음과 같은 것을 사용해야합니까?
QByteArray block;
... fill the block with 2GB of data...
auto written_bytes = 0;
while(written_bytes < 2GB) {
// Restart each time where we previously left
written_bytes += socket->write(block + written_bytes, 2GB - written_bytes);
}
나는 당신이 합리적 크기의 청크 파일을 읽는 유지하고 소켓에 이러한 덩어리를 공급해야 할
실용적인 TCP/IP 패킷 크기 (이더넷을 통한 MTU)는 약 1500 바이트이므로 데이터가 청크로 처리됩니다. 여러분에게 가장 분명하고 유지하기 쉬운 것을 적어보십시오. –
오, 그렇다면 5-16 바이트의 작은 "핑 (ping)"을 말하자면 '쓰기'가 5-6 바이트를 쓸 수 없다면 오류를 던져야한다는 것은 절대적으로 안전합니다. – Dean
비 블로킹 소켓을 사용하지 않는 한 읽기/쓰기가 차단됩니다. –