QTcpSocket问题并发送二进制数据

时间:2011-05-25 10:43:19

标签: qt sockets networking binary-data qtcpsocket

有以下代码:

QFile in("c:\\test\\pic.bmp");
in.open(QFile::ReadOnly);
QByteArray imageBytes = in.readAll();
socket->write(bytesToSend);

在服务器上,我只收到.bmp文件的标题。什么可能导致这种行为?以及如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

此方法最多写入数据字节数,即您的数据大小。但实际上写得更少。它实际上返回发送的字节数。因此,您应该发送一个循环发送剩余的数据,直到发送完所有内容。像这样。

qint64 dataSent = 0;
while(dataSent < sizeof(bytesToSend))
{
   qint64 sentNow = socket->write(bytesToSend+dataSent);
   if(sentNow >= 0)
      dataSent += sentNow;
   else
      throw new Exception();
}

这是本机套接字行为。