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.
  • 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