Название: Что-то непонятное с QTcpServer или QTcpSocket или со мной!
Отправлено: kuzulis от Сентябрь 02, 2009, 12:56
Доброго дня, написал тут два простеньких тестовых консольных приложения , которые обмениваются пакетами через локалхост, для тестирования сигнала readyRead() - и дело в том, что сигнал не отлавливается! writer - это клиент reader - это сервер writer -> main.cpp ... int main(int argc, char *argv[]) { QCoreApplication app(argc, argv);
QTcpSocket *client = new QTcpSocket();
for (;;) { client->connectToHost(QHostAddress::LocalHost, 502); if (client->waitForConnected(5000)) { qDebug("Connected!"); break; } else { qDebug() << "Retry connect" << QTime::currentTime();; } }
QByteArray ba; qint64 bw = 0; while (1) { cout << "Please enter count bytes for wtitten : "; bw = 0; cin >> bw; qDebug() << "Starting writting " << bw << " bytes in time : " << QTime::currentTime(); ba.clear(); ba.resize(bw); for (int i=0;i<bw;i++) { //filling data array ba[i] = i; } bw = client->write(ba); qDebug() << "Writed is : " << bw << " bytes"; cout << "Tx : "; printDataToHex(ba); }
return app.exec(); } ...
reader -> sreader.h ... class Reader : public QTcpServer { Q_OBJECT
public: Reader(QObject *parent = 0) : QTcpServer(parent) { //setMaxPendingConnections(2); if (!listen(QHostAddress::LocalHost, 502)) { qDebug() << "Unable to start the server: " << errorString(); return; } connect(this, SIGNAL(newConnection()), this, SLOT(slotAccept())); } ~Reader() { } private slots: void slotMsg() { qDebug() << "ReadyRead"; } void slotAccept() { socket = nextPendingConnection(); qDebug() << "New connection sd : " << socket->socketDescriptor(); connect(socket, SIGNAL(readyRead()), this, SLOT(slotMsg())); } private: QTcpSocket *socket;
}; ...
Приложение reader отлавливает сам факт подключения клиента writer, но когда я из приложения writer шлю для reader данные - то reader никак не реагирует Прикрепил архивы с исходниками. Помогите люди добрые! :)
Название: Re: Что-то непонятное с QTcpServer или QTcpSocket или со мной!
Отправлено: BRE от Сентябрь 02, 2009, 13:23
Посмотри на: bool QAbstractSocket::flush ()
Название: Re: Что-то непонятное с QTcpServer или QTcpSocket или со мной!
Отправлено: kuzulis от Сентябрь 02, 2009, 13:48
Посмотри на: bool QAbstractSocket::flush () да, СПАСИБО, использование метода flush() после write() исправляет проблему! И я вот заметил при этом, что например если выдавать около 1000000 байт - то сигнал readyRead() несколько раз емиттится :) . (Поведение аналогично виндовой версии QSerialDevice) ! Ура! Это мне и надо было проверить!
|