首先,在接收端,你需要读取接收到的数据包并将其解析。可以使用类似以下代码的方式:
QByteArray receivedData = ... // 从网络中读取的数据
QDataStream stream(receivedData);
quint8 protocolHeader;
stream >> protocolHeader; // 读取协议头
quint16 nameLength;
stream >> nameLength; // 读取文件名长度
QByteArray nameBytes;
nameBytes.resize(nameLength);
stream.readRawData(nameBytes.data(), nameLength); // 读取文件名字节流
QString fileName = QString::fromUtf8(nameBytes); // 将文件名字节流转换为QString类型
quint32 contentLength;
stream >> contentLength; // 读取内容长度
QByteArray contentBytes;
contentBytes.resize(contentLength);
stream.readRawData(contentBytes.data(), contentLength); // 读取内容字节流
// 然后将内容保存到本地桌面
QString filePath = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation) + "/" + fileName;
QFile file(filePath);
if (file.open(QIODevice::WriteOnly)) {
file.write(contentBytes);
file.close();
}
上述代码假设你已经从网络中成功地读取了完整的数据包,并且成功地解析出了文件名和内容。其中filePath
变量表示要保存到本地桌面的文件路径,该路径以可移植的方式获取(使用QStandardPaths
类)。然后使用QFile
类打开该文件并将内容写入。