клиент telnet не подключается к QTCPserver

Почему я не могу подключиться к серверу, работающему на моем локальном хосте, с помощью клиента telnet?
Я использую Windows-7, и клиент telnet включен в панели управления.

Подскажите, как заставить работать?

#define SERVER_PORT 5000

Tcp-сервер создается в объекте tcpserver: ---

tcpserverobject::tcpserverobject(QObject *parent) :
    QObject(parent), tcpServer(0)
{
    tcpServer = new QTcpServer;

    connect(tcpServer, SIGNAL(newConnection()), this, SLOT(on_newConnection()));

}

// Общий слот для tcpserver - поток

void tcpserverobject::dowork()
{
    if (!tcpServer->listen(QHostAddress::LocalHost, SERVER_PORT )) {

        qDebug() << "\n returning from server listning error .. !!! ";

        return;
    }

    qDebug() << "\n server listning";


    //while(1)
    while(!m_bQuit)
    {
    }

}

Новый код подключения к серверу: ---

void tcpserverobject::on_newConnection()
{
    QByteArray block;

    block.append(" \n Hello from server .. !!!") ;

    QTcpSocket *clientConnection = tcpServer->nextPendingConnection();
    connect(clientConnection, SIGNAL(disconnected()),
                clientConnection, SLOT(deleteLater()));

    // Create new thread for this .. client request ..!!
    qDebug() << "\n New connection request ..!!!";
    qDebug() << "\n New client from:" << clientConnection->peerAddress().toString();

    clientConnection->write(block);
    clientConnection->flush();

    clientConnection->disconnectFromHost();
    qDebug() << "\n New connection request closed ..!!!";
}

Теперь я ввожу команду в телнет: ----

C:\Users\Admin> telnet

Welcome to Microsoft Telnet Client

Escape Character is 'CTRL+]'

Microsoft Telnet> open localhost 5000
Connecting To localhost...

Я могу заставить свой сервер перейти в режим прослушивания, так как печатается следующий оператор: -

qDebug() << "\n server listning";

Но почему клиент telnet не может подключиться к серверу, работающему на localhost & PORT = 5000 ?


person Katoch    schedule 20.11.2013    source источник


Ответы (1)


В функции работа, у вас есть этот код: -

//while(1)
while(!m_bQuit)
{
}

Это остановит текущий поток от обработки сообщений. Если вы хотите иметь возможность остановить сервер, создайте слот в классе tcpserverobject, который будет закрывать соединение с QTcpServer при получении сигнала.

person TheDarkKnight    schedule 20.11.2013
comment
на самом деле этот цикл while находится внутри функции dowork() потока, который запускает сервер .... так что вы хотите сказать, что ... если я удалю этот цикл while ... тогда клиент telnet сможет подключиться к серверу. .? ... моя основная проблема заключается в том, что клиент telnet не может подключиться к серверу ... ? - person Katoch; 21.11.2013