2013-10-12 3 views
0

Я хочу отправить массив данных, например data [] = {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.

Смежные вопросы