次のコードがあります。
QFile in("c:\\test\\pic.bmp");
in.open(QFile::ReadOnly);
QByteArray imageBytes = in.readAll();
socket->write(bytesToSend);
サーバーでは、.bmp ファイルのヘッダーのみを受信しています。このような動作の原因は何ですか? そして、この問題を解決するにはどうすればよいですか?
次のコードがあります。
QFile in("c:\\test\\pic.bmp");
in.open(QFile::ReadOnly);
QByteArray imageBytes = in.readAll();
socket->write(bytesToSend);
サーバーでは、.bmp ファイルのヘッダーのみを受信しています。このような動作の原因は何ですか? そして、この問題を解決するにはどうすればよいですか?
このメソッドは、最大でもデータ サイズであるバイト数を書き込みます。しかし、実際にはより少なく書くことができます。実際に送信されたバイト数を返します。したがって、すべてが送信されるまで、残りのデータを送信するループを作成する必要があります。このような。
qint64 dataSent = 0;
while(dataSent < sizeof(bytesToSend))
{
qint64 sentNow = socket->write(bytesToSend+dataSent);
if(sentNow >= 0)
dataSent += sentNow;
else
throw new Exception();
}
これはネイティブ ソケットの動作です。