Russian Qt Forum
Ноябрь 23, 2024, 17:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Контакт по TCP\IP  (Прочитано 4620 раз)
azin
Гость
« : Октябрь 11, 2012, 10:35 »

Есть некое устройство, которое мониторится по телнету (putty). Клиент из примеров (MyClient)
коннектится, но не хочет получать от него данных. В чем хитрость?
Заранее благодарю!
 
Записан
Bepec
Гость
« Ответ #1 : Октябрь 11, 2012, 10:44 »

Есть некая ошибочка у вас. Есть некое сообщение у вас. Некая ошибочка в неком сообщении в некой сценке можно решить неким способом Улыбающийся

Клиент из примеров - MyClient  - такого я чегой то не нашёл Улыбающийся
Записан
azin
Гость
« Ответ #2 : Октябрь 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 получает пустую строку и все зависает.
Записан
Bepec
Гость
« Ответ #3 : Октябрь 11, 2012, 13:33 »

А что зависает?

Приходит сигнал, что можно считать данные. Вы читаете данные. В чём проблема?
Записан
azin
Гость
« Ответ #4 : Октябрь 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:" и далее на передачи не реагирует.
Складывается впечатление, что они не понимают форматы друг друга.
Записан
mutineer
Гость
« Ответ #5 : Октябрь 11, 2012, 15:37 »

А телнет перед каждым пакетом отправляет его размер в виде quint16?
А потому еще и время/строку передает в Qt-формате?
« Последнее редактирование: Октябрь 11, 2012, 15:39 от mutineer » Записан
Serr500
Гость
« Ответ #6 : Октябрь 11, 2012, 16:29 »

Есть некое устройство, которое мониторится по телнету (putty).
Так telnet или putty? Putty по умолчанию устанавливает SSH-соединение (с шифрованием).
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #7 : Октябрь 16, 2012, 17:15 »

здесь QDataStream не прокатит, так как приемная сторона не написана на Qt, и QDataStream там нет вообще.
клеить пакетики вручную, определить критерий завершенности пакета (например \0), и формировать свои сообщения в той же манере.
Я вообще избегаю QDataStream в передаче данных, ибо не подходит для передачи данных для неQt клиентов.
Записан
azin
Гость
« Ответ #8 : Октябрь 18, 2012, 08:47 »

Сработало!
Всем спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.123 секунд. Запросов: 23.