QTcpSocket 和发送二进制数据的问题

发布于 2024-11-09 21:55:49 字数 217 浏览 4 评论 0原文

有以下代码:

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

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

There is following code:

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

On server, i'm receiving only header of .bmp file. What could cause such behavior? And How to solve this problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

同尘 2024-11-16 21:55:49

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

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

这是本机套接字行为。

This method writes at most number of bytes which is your data size. But can actually write less. It actually returns number of bytes sent. So you should make a loop sending the rest of data until everything is sent. Like this.

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

This is a native socket behavior.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文