0

有以下代码:

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

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

4

1 回答 1

2

此方法最多写入您的数据大小的字节数。但实际上可以少写。它实际上返回发送的字节数。因此,您应该循环发送其余数据,直到发送完所有数据。像这样。

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

这是本机套接字行为。

于 2011-05-25T10:59:18.170 回答