[Solved] QTcpServer with console application (Event Loop)



  • Hello everyone

    I have a very simple application to use QTcpServer.

    @
    int main(int argc, char *argv[])
    {
    QCoreApplication a(argc, argv);

    Server * server;
    server=new Server();
    
    server->listen(QHostAddress::Any,1984);
    
    qDebug()<<"Listening ...";
    
    return a.exec&#40;&#41;;
    

    }
    @
    Where the server is just a class that inherits the QTcpServer and reimplement the incomingconnection method to handle the clients in separate thread.
    the problem:

    After the first client connects everything is working perfectly, but then the server seems to be stop listening on the local port.
    Writing the dtor I've noticed after the first client served the server is removed (I mean the dtor is called)

    So I declared the (server) obj to be global one, before main, but I had the same problem.
    I know the event loop will wait for incoming events including the incomingconnection, but what I can't get why the server is destructed after the first client?

    thanks



  • Sorry I found the problem
    @
    connect(thread,SIGNAL(finished()),this,SLOT(deleteLater()));
    @
    I've connected the finished signal of the thread to deleteLater which will remove the server object after the first client is served.


  • Moderators

    Hi Maherall,

    Thanks for sharing your solution to the community!



  • I'm sorry for wasting your time but the mistake was the wrong pointer
    I had to put it like:

    @connect(thread,SIGNAL(finished()),thread,SLOT(deleteLater()))@

    instead of
    @
    connect(thread,SIGNAL(finished()),this,SLOT(deleteLater()))@


  • Moderators

    I don't think it's a waste of time. By sharing others can learn from it. Thanks.



  • Thank you Eddy for your comment.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.