Russian Qt Forum

Qt => Работа с сетью => Тема начата: neosapient от Май 03, 2009, 10:38



Название: не работает QTcpServer -> write, помогите исправить
Отправлено: 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();

}


Название: Re: не работает QTcpServer -> write, помогите исправить
Отправлено: Rcus от Май 03, 2009, 11:04
Простите, а что вы надеялись получить? Я скачал проверил, все работает. В сокет записывается 12 байт, только если вы проверяли обычным telnet клиентом, то подозреваю что ничего не увидели :)


Название: Re: не работает QTcpServer -> write, помогите исправить
Отправлено: neosapient от Май 03, 2009, 11:23
Да, я проверял встроенным в Windows телнет клиентом.

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

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


Появился вопрос про артефакты: в примере выше отсылался "text", в телнет клиенте принимается <ромбик>text  (http://pic.ipicture.ru/uploads/090503/66xShfM67C.jpg) (http://ipicture.ru/). Как от этого можно избавиться ?


Название: Re: не работает QTcpServer -> write, помогите исправить
Отправлено: Rcus от Май 03, 2009, 11:34
http://doc.trolltech.com/4.5/datastreamformat.html


Название: Re: не работает QTcpServer -> write, помогите исправить
Отправлено: neosapient от Май 03, 2009, 14:19
Хм, странную вещь заметил.

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

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

Почему от смены порта данные не отсылаются?


Название: Re: не работает QTcpServer -> write, помогите исправить
Отправлено: mugabe от Май 04, 2009, 11:30
файрвол/антивирус блокирует может быть?