Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Is there a way to check availability local server with timeout in Qt?
Forum Updated to NodeBB v4.3 + New Features

Is there a way to check availability local server with timeout in Qt?

Scheduled Pinned Locked Moved Solved General and Desktop
20 Posts 4 Posters 1.4k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T Offline
    T Offline
    TomNow99
    wrote on last edited by TomNow99
    #3

    @hskoglund Thank you. But I don't give one more important information: my host OS is Windows 10. Curl is linux command right?

    Cobra91151C 1 Reply Last reply
    0
    • Cobra91151C Offline
      Cobra91151C Offline
      Cobra91151
      wrote on last edited by
      #4

      Hello!

      You can try to use QTcpSocket class. Check out the connectToHost method: (https://doc.qt.io/qt-5/qabstractsocket.html#connectToHost) . Also, feel free to check the waitForConnected method as well: https://doc.qt.io/qt-5/qabstractsocket.html#waitForConnected

      Example:

      bool checkServerConnection() {
          QTcpSocket connectionSocket;
          connectionSocket.connectToHost("192.168.43.21", 5);
          connectionSocket.waitForConnected(5000); // 5 seconnds
      
          if (connectionSocket.state() == QTcpSocket::UnconnectedState) {
              connectionSocket.close();
              return false;
          }
      
          connectionSocket.close();
          return true;
      }
      

      Happy coding!

      1 Reply Last reply
      2
      • T Offline
        T Offline
        TomNow99
        wrote on last edited by
        #5

        @Cobra91151 Thank you for answer. Tommorow I check it! :)

        1 Reply Last reply
        0
        • T TomNow99

          @hskoglund Thank you. But I don't give one more important information: my host OS is Windows 10. Curl is linux command right?

          Cobra91151C Offline
          Cobra91151C Offline
          Cobra91151
          wrote on last edited by
          #6

          @TomNow99 said in Is there a way to check availability local server with timeout in Qt?:

          @hskoglund Thank you. But I don't give one more important information: my host OS is Windows 10. Curl is linux command right?

          It is available for Windows OS as well. You can check out this link for more details: https://curl.haxx.se/download.html

          1 Reply Last reply
          1
          • T Offline
            T Offline
            TomNow99
            wrote on last edited by
            #7

            @Cobra91151 @mrjj That QTcpSocket is very good. But what if I have situation that I don't want wait?

            So I want only do:

            QTcpSocket connectionSocket;
            connectionSocket.connectToHost("192.168.43.21", port);
            qDebug()<<connectionSocket.state();
            

            I can no wait and always get "connected" when server is up and "notConnected" when server is down? This is only server on my virtualBox.

            jsulmJ 1 Reply Last reply
            0
            • T TomNow99

              @Cobra91151 @mrjj That QTcpSocket is very good. But what if I have situation that I don't want wait?

              So I want only do:

              QTcpSocket connectionSocket;
              connectionSocket.connectToHost("192.168.43.21", port);
              qDebug()<<connectionSocket.state();
              

              I can no wait and always get "connected" when server is up and "notConnected" when server is down? This is only server on my virtualBox.

              jsulmJ Offline
              jsulmJ Offline
              jsulm
              Lifetime Qt Champion
              wrote on last edited by
              #8

              @TomNow99 Then use https://doc.qt.io/qt-5/qabstractsocket.html#connected

              1 Reply Last reply
              0
              • T Offline
                T Offline
                TomNow99
                wrote on last edited by TomNow99
                #9

                @jsulm Thank you. But I have other problem: I want check when server is down and I can't connect. Something like:

                QTcpSocket connectionSocket;
                connect(connectionSocket, SIGNAL(cannotConnect()), this, SLOT(cannotConnectSlot()));
                connectionSocket.connectToHost("192.168.43.21", port);
                
                jsulmJ 1 Reply Last reply
                0
                • T TomNow99

                  @jsulm Thank you. But I have other problem: I want check when server is down and I can't connect. Something like:

                  QTcpSocket connectionSocket;
                  connect(connectionSocket, SIGNAL(cannotConnect()), this, SLOT(cannotConnectSlot()));
                  connectionSocket.connectToHost("192.168.43.21", port);
                  
                  jsulmJ Offline
                  jsulmJ Offline
                  jsulm
                  Lifetime Qt Champion
                  wrote on last edited by
                  #10

                  @TomNow99 You could use a QTimer with a timeout and if you do not get connected() until timeout you can assume that you can't connect.

                  1 Reply Last reply
                  1
                  • T Offline
                    T Offline
                    TomNow99
                    wrote on last edited by TomNow99
                    #11

                    @jsulm I think about that, but I have many Qtimers :D

                    EDIT:

                    I want something like:

                    Run my server. And in my application I want check connect to this server every 3 seconds. If I can't connect I want write qDebug()<<"noConnection" and end checking.

                    jsulmJ 1 Reply Last reply
                    0
                    • T TomNow99

                      @jsulm I think about that, but I have many Qtimers :D

                      EDIT:

                      I want something like:

                      Run my server. And in my application I want check connect to this server every 3 seconds. If I can't connect I want write qDebug()<<"noConnection" and end checking.

                      jsulmJ Offline
                      jsulmJ Offline
                      jsulm
                      Lifetime Qt Champion
                      wrote on last edited by
                      #12

                      @TomNow99 I don't see any other solution as even a working connection needs some time to be established, you can't simply do the qDebug just after calling connectToHost()

                      1 Reply Last reply
                      0
                      • T Offline
                        T Offline
                        TomNow99
                        wrote on last edited by TomNow99
                        #13

                        @jsulm Hmmm. I tried add new Qthread and check connection in this Qthread, but I get error "Cannot create children for a parent that is in a different thread". My code:

                        myThreadClass::myThreadClass(QTcpSocket *connSocket): connectionSocket(connSocket)
                        {
                        
                        }
                        
                        myThreadClass::~myThreadClass()
                        {
                            connectionSocket->close();
                        }
                        
                        void myThreadClass::run()
                        {
                            while(1)
                            {
                                connectionSocket->connectToHost("192.168.43.23", 139);
                                connectionSocket->waitForConnected(3000);
                        
                                if(connectionSocket->state() == QTcpSocket::UnconnectedState)
                                {
                                    connectionSocket->close();
                                    emit noConnection();
                                }
                        
                                connectionSocket->close();
                            }
                        }
                        

                        In mainWindow i create myThread and started it. I add QTcpSocket pointer and get this error.

                        class myThreadClass: public QThread
                        {
                            Q_OBJECT
                        public:
                            myThreadClass(QTcpSocket *connSocket);
                            ~myThreadClass();
                            void run();
                        
                        private:
                            QTcpSocket *connectionSocket;
                        
                        signals:
                            void noConnection();
                        };
                        
                        jsulmJ 2 Replies Last reply
                        0
                        • T TomNow99

                          @jsulm Hmmm. I tried add new Qthread and check connection in this Qthread, but I get error "Cannot create children for a parent that is in a different thread". My code:

                          myThreadClass::myThreadClass(QTcpSocket *connSocket): connectionSocket(connSocket)
                          {
                          
                          }
                          
                          myThreadClass::~myThreadClass()
                          {
                              connectionSocket->close();
                          }
                          
                          void myThreadClass::run()
                          {
                              while(1)
                              {
                                  connectionSocket->connectToHost("192.168.43.23", 139);
                                  connectionSocket->waitForConnected(3000);
                          
                                  if(connectionSocket->state() == QTcpSocket::UnconnectedState)
                                  {
                                      connectionSocket->close();
                                      emit noConnection();
                                  }
                          
                                  connectionSocket->close();
                              }
                          }
                          

                          In mainWindow i create myThread and started it. I add QTcpSocket pointer and get this error.

                          class myThreadClass: public QThread
                          {
                              Q_OBJECT
                          public:
                              myThreadClass(QTcpSocket *connSocket);
                              ~myThreadClass();
                              void run();
                          
                          private:
                              QTcpSocket *connectionSocket;
                          
                          signals:
                              void noConnection();
                          };
                          
                          jsulmJ Offline
                          jsulmJ Offline
                          jsulm
                          Lifetime Qt Champion
                          wrote on last edited by
                          #14
                          This post is deleted!
                          1 Reply Last reply
                          0
                          • T TomNow99

                            @jsulm Hmmm. I tried add new Qthread and check connection in this Qthread, but I get error "Cannot create children for a parent that is in a different thread". My code:

                            myThreadClass::myThreadClass(QTcpSocket *connSocket): connectionSocket(connSocket)
                            {
                            
                            }
                            
                            myThreadClass::~myThreadClass()
                            {
                                connectionSocket->close();
                            }
                            
                            void myThreadClass::run()
                            {
                                while(1)
                                {
                                    connectionSocket->connectToHost("192.168.43.23", 139);
                                    connectionSocket->waitForConnected(3000);
                            
                                    if(connectionSocket->state() == QTcpSocket::UnconnectedState)
                                    {
                                        connectionSocket->close();
                                        emit noConnection();
                                    }
                            
                                    connectionSocket->close();
                                }
                            }
                            

                            In mainWindow i create myThread and started it. I add QTcpSocket pointer and get this error.

                            class myThreadClass: public QThread
                            {
                                Q_OBJECT
                            public:
                                myThreadClass(QTcpSocket *connSocket);
                                ~myThreadClass();
                                void run();
                            
                            private:
                                QTcpSocket *connectionSocket;
                            
                            signals:
                                void noConnection();
                            };
                            
                            jsulmJ Offline
                            jsulmJ Offline
                            jsulm
                            Lifetime Qt Champion
                            wrote on last edited by
                            #15

                            @TomNow99 said in Is there a way to check availability local server with timeout in Qt?:

                            while(1)

                            You're blocking event loop...
                            And the socket must be allocated in the thread where you want to use it.

                            1 Reply Last reply
                            0
                            • T Offline
                              T Offline
                              TomNow99
                              wrote on last edited by
                              #16

                              @jsulm I would like to check still connection that I add while(1)

                              jsulmJ 1 Reply Last reply
                              0
                              • T TomNow99

                                @jsulm I would like to check still connection that I add while(1)

                                jsulmJ Offline
                                jsulmJ Offline
                                jsulm
                                Lifetime Qt Champion
                                wrote on last edited by
                                #17

                                @TomNow99 I'm still not sure why you want this complicated solution using a thread if you can have one using a timer...

                                1 Reply Last reply
                                0
                                • T Offline
                                  T Offline
                                  TomNow99
                                  wrote on last edited by TomNow99
                                  #18

                                  @jsulm Hmmm, but how? Something like:

                                  in QTimerSlot ( check evert 3 sec ) I have:

                                  connectionSocket->connectToHost("192.168.43.23", 139);
                                  timer2.start(1000); // maybe singleShot
                                  
                                  

                                  and how to connect information from slotConnected and other QTimer?

                                  slotConnected()
                                  {
                                      result = true;
                                  }
                                  
                                  slotTimer2()
                                  {
                                     if(result == false )
                                     {
                                  
                                     }
                                  }
                                  

                                  ?

                                  jsulmJ 1 Reply Last reply
                                  0
                                  • T TomNow99

                                    @jsulm Hmmm, but how? Something like:

                                    in QTimerSlot ( check evert 3 sec ) I have:

                                    connectionSocket->connectToHost("192.168.43.23", 139);
                                    timer2.start(1000); // maybe singleShot
                                    
                                    

                                    and how to connect information from slotConnected and other QTimer?

                                    slotConnected()
                                    {
                                        result = true;
                                    }
                                    
                                    slotTimer2()
                                    {
                                       if(result == false )
                                       {
                                    
                                       }
                                    }
                                    

                                    ?

                                    jsulmJ Offline
                                    jsulmJ Offline
                                    jsulm
                                    Lifetime Qt Champion
                                    wrote on last edited by
                                    #19

                                    @TomNow99 Yes, like this

                                    1 Reply Last reply
                                    1
                                    • T Offline
                                      T Offline
                                      TomNow99
                                      wrote on last edited by
                                      #20

                                      @jsulm Thank you

                                      1 Reply Last reply
                                      0

                                      • Login

                                      • Login or register to search.
                                      • First post
                                        Last post
                                      0
                                      • Categories
                                      • Recent
                                      • Tags
                                      • Popular
                                      • Users
                                      • Groups
                                      • Search
                                      • Get Qt Extensions
                                      • Unsolved