Название: Контакт по TCP\IP Отправлено: azin от Октябрь 11, 2012, 10:35 Есть некое устройство, которое мониторится по телнету (putty). Клиент из примеров (MyClient)
коннектится, но не хочет получать от него данных. В чем хитрость? Заранее благодарю! Название: Re: Контакт по TCP\IP Отправлено: Bepec от Октябрь 11, 2012, 10:44 Есть некая ошибочка у вас. Есть некое сообщение у вас. Некая ошибочка в неком сообщении в некой сценке можно решить неким способом :)
Клиент из примеров - MyClient - такого я чегой то не нашёл :) Название: Re: Контакт по TCP\IP Отправлено: azin от Октябрь 11, 2012, 13:29 Вот определение
m_pTcpSocket = new QTcpSocket(this); m_pTcpSocket->connectToHost(strHost, nPort); connect(m_pTcpSocket, SIGNAL(connected()), SLOT(slotConnected())); connect(m_pTcpSocket, SIGNAL(readyRead()), SLOT(slotReadyRead())); connect(m_pTcpSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(slotError(QAbstractSocket::SocketError)) ); slotConnected срабатывает нормально, устройство передает "Username:". slotReadyRead получает пустую строку и все зависает. Название: Re: Контакт по TCP\IP Отправлено: Bepec от Октябрь 11, 2012, 13:33 А что зависает?
Приходит сигнал, что можно считать данные. Вы читаете данные. В чём проблема? Название: Re: Контакт по TCP\IP Отправлено: azin от Октябрь 11, 2012, 13:59 Вот процедура slotReadyRead
quint16 m_nNextBlockSize; QDataStream in(m_pTcpSocket); in.setVersion(QDataStream::Qt_4_5); for (;;) { if (!m_nNextBlockSize) { if (m_pTcpSocket->bytesAvailable() < sizeof(quint16)) { break; } in >> m_nNextBlockSize; } if (m_pTcpSocket->bytesAvailable() < m_nNextBlockSize) { break; } QTime time; QString str; in >> time >> str; m_ptxtInfo->append(time.toString() + " " + str); m_nNextBlockSize = 0; } она активизируется один раз при коннекте, bytesAvailable=0, str="". Хотя Putty получает "Usermame:" и далее на передачи не реагирует. Складывается впечатление, что они не понимают форматы друг друга. Название: Re: Контакт по TCP\IP Отправлено: mutineer от Октябрь 11, 2012, 15:37 А телнет перед каждым пакетом отправляет его размер в виде quint16?
А потому еще и время/строку передает в Qt-формате? Название: Re: Контакт по TCP\IP Отправлено: Serr500 от Октябрь 11, 2012, 16:29 Есть некое устройство, которое мониторится по телнету (putty). Так telnet или putty? Putty по умолчанию устанавливает SSH-соединение (с шифрованием).Название: Re: Контакт по TCP\IP Отправлено: Fregloin от Октябрь 16, 2012, 17:15 здесь QDataStream не прокатит, так как приемная сторона не написана на Qt, и QDataStream там нет вообще.
клеить пакетики вручную, определить критерий завершенности пакета (например \0), и формировать свои сообщения в той же манере. Я вообще избегаю QDataStream в передаче данных, ибо не подходит для передачи данных для неQt клиентов. Название: Re: Контакт по TCP\IP Отправлено: azin от Октябрь 18, 2012, 08:47 Сработало!
Всем спасибо! |