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?

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.3k 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.
  • hskoglundH Offline
    hskoglundH Offline
    hskoglund
    wrote on last edited by
    #2

    curl to the rescue:

    curl -m 5 smb://192.168.43.21/ShareName/CanaryFile.txt
    

    If the SMB server is alive, curl l will return curl: (67) Login denied
    If the SMB server is down, curl will return curl: (28) Connection timed out after 5000 milliseconds

    1 Reply Last reply
    0
    • 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 Online
                jsulmJ Online
                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 Online
                    jsulmJ Online
                    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 Online
                        jsulmJ Online
                        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 Online
                            jsulmJ Online
                            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 Online
                              jsulmJ Online
                              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 Online
                                  jsulmJ Online
                                  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 Online
                                      jsulmJ Online
                                      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