我想在客戶端服務器程序中發送/接收圖像文件和2個整數作爲消息。如何通過QT中的套接字傳輸更大的對象?
我使用這個QLocalSocket
和QImage
。
但是,我不知道如何才能從圖像和整數完整寫入緩衝區後才從套接字讀取,因爲readyRead
信號在第一對字節後已經被觸發。
這裏是我的代碼部分:
// sending
QDataStream stream(socket);
stream << image << i << j;
// recieving
void MainWindow::readyRead() {
// ...
if (socket->bytesAvailable() > 400)
{
QByteArray b = socket->readAll();
QDataStream stream(&b, QIODevice::ReadOnly);
QImage image;
int i, j;
stream >> image >> i >> j;
// ...
}
}
我試圖猜測輸入的文件大小,但由於QImage的是序列化到PNG數據大小是可變的,有時文件的末尾沒有得到寫入在我開始讀取它之前的緩衝區。
有沒有簡單的解決方案呢?
你能不只是第一次發送圖像的大小?例如,在由公共接口定義的報頭結構中。你還可以包括其他有用的信息,如發件人標籤,時間戳,名稱等...... – Dennis 2011-05-09 17:06:38