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 に答える