qt6 c++ 使用QDataStream发送文件名和文件内容时遇到的问题

栏目:日记 作者:rice 发表时间:2025-08-25 06:04:34阅读:30次

qt6 c++ 使用QDataStream发送文件名和文件内容时遇到的问题

在网上搜索 qt6 c++ 服务器端接收和发送文件, 搜到百度AI给出的程序片段。该程序片段使用了QDataStream类来发送和接收文件。复制该程序,进行试用,并编辑了与服务器端对应的客户端程序。运行时遇到了问题。客服端发送一个简单的文本文件,服务器端接收文件时自动退出。

后来排查原因,并在网上搜索 qt6 c++ QDataStream客户端接收和发送文件,搜到百度AI给出的程序片段,直接复制到客户端,再试用和查找问题,后来找到了问题。客户端发送QByteArray fileName时,会自动在该字符串前面加上4字节的字符串长度,这时需要先读取前四个字节,再读取文件名字符串,否则会出现读取文件名错误。程序中使用了quint32 fileNameSize2 变量读取字符串长度。

    quint32 fileNameSize2;
    in >> fileNameSize2;

发送文件内容时也会出现这样的情况,收到的数据里字节数多了4,采用同样的方法,先读取文件大小,再读取文件内容,就能正确的接收文件内容。