QIODevice::write函数惹得祸

在学习TCP通信的时候,想用QT做个服务器给客户端发送文件的小例子。但是捣鼓半天,客户端收到的文件大小总是小于服务器端发送的文件大小
百思不得其解,参照了网上别人代码后终于发现症结所在。

有问题的服务器端代码:

char buffer[1024];
while(!file->atEnd())
{
   QApplication::processEvents();  //防止UI界面卡死
   file->read(buffer,1024));  //每次往buffer读1024字节
   socket->write(buffer);  //将buffer内容写入套接字
}

表面上完美,实际上有个隐含的Bug。

应该给write函数再补充第二个参数,修改为:

socket->write(buffer,1024);

查看文档,发现write是重载函数:

  • qint64 QIODevice::write(const char *data, qint64 maxSize)
    将最多maxSize字节数据写入设备。返回实际写入的字节数;如果发生错误,则返回-1。

  • qint64 QIODevice::write(const char *data)
    将以‘/0’结尾的字符串中的数据写入设备(‘\0’以后的数据都丢掉了)。返回实际写入的字节数,如果发生错误则返回-1。

看文档不仔细,耽误了不少功夫,记录一下。

你可能感兴趣的:(Qt)