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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: не работает QTcpServer -> write, помогите исправить  (Прочитано 4865 раз)
neosapient
Гость
« : Май 03, 2009, 10:38 »

Добрый день.
Уже несколько вечеров бьюсь над отправкой текста через сокет.

Взял за прототип пример threadedfortuneserver.
Убрал диалоговое окно.
Сервер запускается на 23 порту.

В обработчике входящих соединений пытаюсь отправить текст, но не выходит. Что сделано неправильно и как это исправить.
Код:
void TelnetThread::run()
{
    QTcpSocket tcpSocket;
    if (!tcpSocket.setSocketDescriptor(socketDescriptor)) {
        emit error(tcpSocket.error());
        return;
    }

    QByteArray block;
    QDataStream out(&block, QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_4_0);
QString text;
text = "text";
    out << text;

    tcpSocket.write(block);
    tcpSocket.waitForBytesWritten(10000);
    //tcpSocket.disconnectFromHost();
    //tcpSocket.waitForDisconnected();

}
Записан
Rcus
Гость
« Ответ #1 : Май 03, 2009, 11:04 »

Простите, а что вы надеялись получить? Я скачал проверил, все работает. В сокет записывается 12 байт, только если вы проверяли обычным telnet клиентом, то подозреваю что ничего не увидели Улыбающийся
Записан
neosapient
Гость
« Ответ #2 : Май 03, 2009, 11:23 »

Да, я проверял встроенным в Windows телнет клиентом.

Рассчитывал получить "text".

Добавил вывод  QString::toAscii();
Код:
	QString text;
text = "text";
out << text.  toAscii();


Появился вопрос про артефакты: в примере выше отсылался "text", в телнет клиенте принимается <ромбик>text  . Как от этого можно избавиться ?
« Последнее редактирование: Май 03, 2009, 11:26 от neosapient » Записан
Rcus
Гость
« Ответ #3 : Май 03, 2009, 11:34 »

http://doc.trolltech.com/4.5/datastreamformat.html
Записан
neosapient
Гость
« Ответ #4 : Май 03, 2009, 14:19 »

Хм, странную вещь заметил.

Заменил порт с 23 (телнет) на 25 (почта) и программа перестала передавать в ответ "text".

Других серверов претендующих на 25 порт нет. Да и отладчиком видно, что запрос приходит в TelnetThread::run().

Почему от смены порта данные не отсылаются?
Записан
mugabe
Гость
« Ответ #5 : Май 04, 2009, 11:30 »

файрвол/антивирус блокирует может быть?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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