我的发送文件数据格式为:
总长度 文件名长度 文件名 文件数据
64位 64位 由文件名长度决定
发送端:
void Dialog::updateClientProgress(qint64 numBytes)
{
bytesWritten += (int)numBytes;
if (bytesToWrite > 0){
outBlock = localFile->read(qMin(bytesToWrite, loadSize));
bytesToWrite -= (int)tcpClient.write(outBlock);
outBlock.resize(0);
}
else{
localFile->close();
}
}
接受端:
void Dialog::updateServerProgress()
{
if(bytesReceived <= sizeof(qint64)*2){
if((tcpServerConnection->bytesAvailable() >= sizeof(qint64)*2)&&(fileNameSize ==0)){
in>>TotalBytes>>fileNameSize;
bytesReceived += sizeof(qint64)*2;
}
if((tcpServerConnection->bytesAvailable() >= fileNameSize)&&(fileNameSize !=0)){
in>>fileName;
bytesReceived += fileNameSize;
localFile = new QFile(fileName);
if (!localFile->open(QFile::WriteOnly )) {
QMessageBox::warning(this, tr("应用程序"),
tr("无法读取文件 %1:\n%2.")
.arg(fileName)
.arg(localFile->errorString()));
return;
}
}else{
return;
}
}
if (bytesReceived < TotalBytes){
bytesReceived += tcpServerConnection->bytesAvailable();
inBlock = tcpServerConnection->readAll();
localFile->write(inBlock);
inBlock.resize(0);
}
if (bytesReceived == TotalBytes) {
tcpServerConnection->close();
}
}