大家好,我参照 网上的例子 写了一个QT客户端程序,想给服务器传文件,服务器上的监听程序用C写,一切正常,但是服务端接收数据是前三个应该是
qint64(文件大小+文件名长度), qint64(文件名长度), QString
所以我在服务端read 8个字节,然后再8个字节,想把前两个数据读取到,但是怎么读取都是0,略过这两步,又发现读到的文件名每个字符之间都有一个\0,导致输出一个字符就结束输出,略过前三步,我也不知道具体是多少个字节,所以我就直接读34个字节,然后扔掉,继续再读真正要发送的文件数据,发现文件内容数据是正常的。
具体到Linux环境下的C程序,前面的头到底应该怎样接收和解析啊?
我已经在网上搜索了整2天也没找到一个结果,所以没办法,只能发帖请教大家了,还望能给我几个关键字,好让我能知道大概出问题的地方,并继续查找走下去。
万分感谢!
QT客户端组织并发送头数据的相关代码:
QDataStream sendOut(&outBlock,QIODevice::WriteOnly);
sendOut.setVersion(QDataStream::Qt_4_6);
QString currentFileName = fileName.right(fileName.size() - fileName.lastIndexOf('/')-1);
sendOut<<qint64(0)<<qint64(0)<<currentFileName;
//依次写入总大小信息空间,文件名大小信息空间,文件名
totalBytes += outBlock.size();
//这里的总大小是文件名大小等信息和实际文件大小的总和
sendOut.device()->seek(0);
sendOut<<totalBytes<<qint64((outBlock.size() - sizeof(qint64)*2));
//返回outBolock的开始,用实际的大小信息代替两个qint64(0)空间
bytesToWrite = totalBytes - tcpClient->write(outBlock);
//发送完头数据后剩余数据的大小