2013-10-12 230 views
0

我想發送數據數組,例如數據[] = {0x1,0x2,0x3,0x4,0x5},從TCP服務器到客戶端。我寫了下面的代碼,Qt TCP服務器/客戶端通信

void server::sendData() 
{ 
    QByteArray data; 
    data.resize(5); 

    data[0] = 0x1; 
    data[1] = 0x2; 
    data[2] = 0x3; 
    data[3] = 0x4; 
    data[4] = 0x5; 

    socket->write(data); 
} 

現在的客戶是

void client::readData() 
{ 
    qDebug() << "Bytes available: " << socket->bytesAvailable(); 
    QByteArray data = socket->readAll(); 
    for(int k = 0; k< 5; k++) 
    { 
     qDebug() << "Data " << data[k]; 
    } 
} 

但它不工作。如何讀取客戶端中接收到的數組? 收到的字節數是5,這是正確的,問題是如何存儲數據並讀取它。

回答

0

你究竟是什麼意思不起作用?代碼看起來不錯。但是,您應該知道,在任何情況下都不會收到所有字節。你也可以得到一個2字節的事件,另一個3字節的事件。

您的問題可能是您的調試打印,它將數據解釋爲字符代碼而不是數字?嘗試

qDebug() << "Data " << (int)data[k]; 
0

無常用的基於IP的網絡協議(UDP,TCP)保證你會多少數據在任何時刻接收任何東西。在TCP中,唯一的保證是,如果你得到的數據是按順序存在的,但就協議而言,readData()只用緩衝區中的一個字節就可以調用。

這是不正確的,你忽略了data.length()。你的循環只能迭代到data.length()-1。有沒有保證多大data.length()是。它不會是零,但它可能是1,例如。