有以下代码:
QFile in("c:\\test\\pic.bmp");
in.open(QFile::ReadOnly);
QByteArray imageBytes = in.readAll();
socket->write(bytesToSend);
在服务器上,我只收到.bmp文件的标题。什么可能导致这种行为?以及如何解决这个问题?
答案 0 :(得分:2)
此方法最多写入数据字节数,即您的数据大小。但实际上写得更少。它实际上返回发送的字节数。因此,您应该发送一个循环发送剩余的数据,直到发送完所有内容。像这样。
qint64 dataSent = 0;
while(dataSent < sizeof(bytesToSend))
{
qint64 sentNow = socket->write(bytesToSend+dataSent);
if(sentNow >= 0)
dataSent += sentNow;
else
throw new Exception();
}
这是本机套接字行为。