Название: QtcpSocket получение данных от роутера
Отправлено: knower от Март 21, 2010, 11:59
устанавливаем содеинение с модемом (через telnet 23 порт) данные модему уходят а вот как прочитать что он мне прислал не очень получается :-\ подскажите пож-ста вот кусок кода connect(&tcpSocket,SIGNAL(connected()),this,SLOT(con())); .. void avangard::connectToDsl(){ tcpSocket.connectToHost("192.168.1.1",23);
} void avangard::con() { QByteArray block; QDataStream in(&block,QIODevice::WriteOnly); in<<"admin"; tcpSocket.write(block); } здесь получаем данные от модема void avangard::mes4(){ QString data2; QDataStream out(&tcpSocket); out>>data2; // здесь надо сделать проверку все ли мы получили ui.textEdit->setText(data2); // но как ? }
Название: Re: QtcpSocket получение данных от роутера
Отправлено: 0xFF от Март 21, 2010, 21:24
C++ (Qt) data2 = out.readAll();
или C++ (Qt) while ( out->canReadLine() ) { data2 = out->readLine(); ... }
Название: Re: QtcpSocket получение данных от роутера
Отправлено: hackoff от Март 22, 2010, 03:39
Чтение данных: //Чтение из сокета /SLOT void connectionTCP::ready_read(){ while(messengeChek()) { qint32 sizeData=0; QByteArray data; // читаем 4 байта и проверяем их qint64 readed = this->read((char*) &sizeData, sizeof(sizeData)); if((sizeof(sizeData)==readed) && (sizeData>0)) { // считываем остальные данные data = this->read(sizeData); if(data.size() != sizeData) { // error!!! // disconnect, ... return; } analysisPackge(data); } } }
//Проверка целостности сообщения bool connectionTCP::messengeChek(){ qint32 minRead=0; qint64 bytesDataAvailable = this->bytesAvailable(); //Мало данных if(bytesDataAvailable < sizeof(minRead)) return false;
//Читаем 4 байта и проверяем qint64 peekSize = this->peek((char*)&minRead, sizeof(minRead)); if(peekSize != sizeof(minRead)) return false;
if(0 == minRead) { this->read(4); // пустой пакет return false; }
//Проверяем пришли ли все данные bytesDataAvailable = this->bytesAvailable(); if(bytesDataAvailable < sizeof(minRead) + minRead) return false; //Усе ухорошо :) return true; }
//Разбор пакета void connectionTCP::analysisPackge(QByteArray &data){ QDataStream tmp(&data, QIODevice::ReadOnly); tmp.setVersion(QDataStream::Qt_4_6); QString cmd; tmp>>cmd; if (cmd==QString("onMyScreen")){ tmp>>pixmapScreen; tmp>>cmd; if (cmd!=QString("end")){ // emitDisconnect(); return; } emit addScreenThread(&pixmapScreen); return; }
if (cmd==QString("myNameIs")){ tmp>>myNameIs; emit myNames(myNameIs); return; }
if (cmd==QString("HelloFriend")){ tmp>>myNameIs; // myNameIs.append("lasdfjlsajfljsadlfjsaldfjlsjdfl;asdfjlsdjflasjflsdfsdf"); // connectTrue(); emit connectTrue(this); return; }
// emitDisconnect(); }
Запись данных void connectionTCP::sendData(QByteArray &data){ //QByteArray &data сериализованные данные
qint32 sizeData = data.size(); if (sizeData){ this->write((char*) &sizeData, sizeof(sizeData)); this->write(data); } }
|