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. QWebSocket wont connect or give error
Qt 6.11 is out! See what's new in the release blog

QWebSocket wont connect or give error

Scheduled Pinned Locked Moved Solved General and Desktop
15 Posts 3 Posters 4.4k Views 1 Watching
  • 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.
  • mrjjM mrjj

    @Kris-Revi said in QWebSocket wont connect or give error:

    void connectTo()
    {
    MySocket client(QUrl(QStringLiteral("ws://192.168.10.122:80")), true);
    }

    Hi
    But wont the client die very fast ?
    Since its async, it might not get a chance to report anything as it runs out of scope and gets deleted.

    K Offline
    K Offline
    Kris Revi
    wrote on last edited by
    #3

    @mrjj i am not sure! first time touching Qt C++ ! i've done this in PyQt5 Python but yea

    it doesn't seem to connect at all! it just spits out the qDebug message WebSocket server: QUrl("ws://192.168.10.122:80")

    mrjjM JonBJ 2 Replies Last reply
    0
    • K Kris Revi

      @mrjj i am not sure! first time touching Qt C++ ! i've done this in PyQt5 Python but yea

      it doesn't seem to connect at all! it just spits out the qDebug message WebSocket server: QUrl("ws://192.168.10.122:80")

      mrjjM Offline
      mrjjM Offline
      mrjj
      Lifetime Qt Champion
      wrote on last edited by mrjj
      #4

      @Kris-Revi
      Hi
      well since its a variable in a function it will be deleted as soon as function ends.
      So that might happen really fast before it get chance to signal anything else.

      Try having
      MySocket client; as a member and not as a local variable.
      and see if that helps.

      you can also do
      void connectTo()
      {
      MySocket* client= new MySocket (QUrl(QStringLiteral("ws://192.168.10.122:80")), true);
      }

      but its a memory leak but fine to test if that is indeed the issue.
      (killed by scope)

      K 1 Reply Last reply
      0
      • K Kris Revi

        @mrjj i am not sure! first time touching Qt C++ ! i've done this in PyQt5 Python but yea

        it doesn't seem to connect at all! it just spits out the qDebug message WebSocket server: QUrl("ws://192.168.10.122:80")

        JonBJ Offline
        JonBJ Offline
        JonB
        wrote on last edited by JonB
        #5

        @Kris-Revi said in QWebSocket wont connect or give error:

        @mrjj i am not sure! first time touching Qt C++ ! i've done this in PyQt5 Python but yea

        In your PyQt5, did you do same client = MySocket (...) where client was just a local label in a method; or did you do a self.client = MySocket (...), or pass a parent? Because @mrjj is right, and you will have to be even more careful about scope in C++ than in Python....

        K 1 Reply Last reply
        1
        • JonBJ JonB

          @Kris-Revi said in QWebSocket wont connect or give error:

          @mrjj i am not sure! first time touching Qt C++ ! i've done this in PyQt5 Python but yea

          In your PyQt5, did you do same client = MySocket (...) where client was just a local label in a method; or did you do a self.client = MySocket (...), or pass a parent? Because @mrjj is right, and you will have to be even more careful about scope in C++ than in Python....

          K Offline
          K Offline
          Kris Revi
          wrote on last edited by
          #6

          @JonB yea i did self.client so yea difference here is local vs class member :P

          so i added MySocket Socket; to mainwindow.h header file

          but how do i now call that

          MySocket client(QUrl(QStringLiteral("ws://%1:80").arg(selected_board)), true);
          

          if i do

          Socket(QUrl(QStringLiteral("ws://%1:80").arg(selected_board)), true);
          

          i get type 'MySocket' does not provide a call operator

          1 Reply Last reply
          0
          • K Offline
            K Offline
            Kris Revi
            wrote on last edited by
            #7

            so i did it like this

            // =========================================================================================================== //
            // CONSTRUCTOR
            // =========================================================================================================== //
            MySocket::MySocket(QObject *parent) : QObject(parent)
            {
                connect(&m_webSocket, &QWebSocket::connected, this, &MySocket::onConnected);
                connect(&m_webSocket, &QWebSocket::disconnected, this, &MySocket::closed);
                connect(&m_webSocket, QOverload<QAbstractSocket::SocketError>::of(&QWebSocket::error), [=](QAbstractSocket::SocketError error)
                {
                   qDebug() << "[ERROR][SOCKET] " << error;
                });
                
            }
            
            // =========================================================================================================== //
            // Socket Connected
            // =========================================================================================================== //
            void MySocket::doConnect(QString URL)
            {
                qDebug() << "WebSocket server:" << URL;
                m_webSocket.open(QUrl(URL));
            }
            

            i moved the .open part to it's own function and called it from Socket.doConnect(selected_board);

            but i get an error (atleast something)

            WebSocket server: "192.168.10.122"
            [ERROR][SOCKET]  QAbstractSocket::UnsupportedSocketOperationError
            
            1 Reply Last reply
            0
            • mrjjM mrjj

              @Kris-Revi
              Hi
              well since its a variable in a function it will be deleted as soon as function ends.
              So that might happen really fast before it get chance to signal anything else.

              Try having
              MySocket client; as a member and not as a local variable.
              and see if that helps.

              you can also do
              void connectTo()
              {
              MySocket* client= new MySocket (QUrl(QStringLiteral("ws://192.168.10.122:80")), true);
              }

              but its a memory leak but fine to test if that is indeed the issue.
              (killed by scope)

              K Offline
              K Offline
              Kris Revi
              wrote on last edited by
              #8

              @mrjj you know? :)

              mrjjM 1 Reply Last reply
              0
              • K Kris Revi

                @mrjj you know? :)

                mrjjM Offline
                mrjjM Offline
                mrjj
                Lifetime Qt Champion
                wrote on last edited by
                #9

                @Kris-Revi
                Hi
                It can say this error if you ask it to do something while connecting state but i dont see code that would do it.

                K 1 Reply Last reply
                0
                • mrjjM mrjj

                  @Kris-Revi
                  Hi
                  It can say this error if you ask it to do something while connecting state but i dont see code that would do it.

                  K Offline
                  K Offline
                  Kris Revi
                  wrote on last edited by
                  #10

                  @mrjj so what i do is this (keep in mind the code above)

                  void MainWindow::findIP(QString Key)
                  {
                      auto key = Key;
                          if ( board.count(key) ) {
                              DeviceInfo &di = board[key];
                              connectTo( di.ip );
                          }
                          else
                          {
                              qDebug() << "[ERROR][STRUCT] Did not find key using the word : " << Key;
                          }
                  }
                  
                  // This is a button bind on clicked (one of the Devices) triggers the function above
                  void MainWindow::on_BUTTON_STUDIOLIGHT_clicked() { findIP("Studio Lights"); }
                  
                  // This is function that gets called from findIP function todo the connection with socket
                  void MainWindow::connectTo(QString selected_board)
                  {
                      Socket.doConnect(selected_board);
                  }
                  

                  and this is the MySocket.cpp file

                  // =========================================================================================================== //
                  // INCLUDE
                  // =========================================================================================================== //
                  #include "MySocket.h"
                  #include <QDebug>
                  
                  QT_USE_NAMESPACE
                  
                  // =========================================================================================================== //
                  // CONSTRUCTOR
                  // =========================================================================================================== //
                  MySocket::MySocket(QObject *parent) : QObject(parent)
                  {
                      connect(&m_webSocket, &QWebSocket::connected, this, &MySocket::onConnected);
                      connect(&m_webSocket, &QWebSocket::disconnected, this, &MySocket::closed);
                      connect(&m_webSocket, QOverload<QAbstractSocket::SocketError>::of(&QWebSocket::error), [=](QAbstractSocket::SocketError error)
                      {
                         qDebug() << "[ERROR][SOCKET] " << error;
                      });
                      
                  }
                  
                  // =========================================================================================================== //
                  // Socket Connected
                  // =========================================================================================================== //
                  void MySocket::doConnect(QString URL)
                  {
                      qDebug() << "WebSocket server:" << URL;
                      m_webSocket.open(QUrl(URL));
                  }
                  // =========================================================================================================== //
                  // Socket On Connected
                  // =========================================================================================================== //
                  void MySocket::onConnected()
                  {
                      if (m_debug)
                          qDebug() << "WebSocket connected";
                  }
                  // =========================================================================================================== //
                  // Send Message (For Strips)
                  // =========================================================================================================== //
                  void MySocket::sendCommandStrip(const QString &bName, int bValue)
                  {
                      m_webSocket.sendTextMessage(QStringLiteral("{%0:%1}").arg(bName).arg(bValue));
                  }
                  // =========================================================================================================== //
                  // Send Message (For Matrix)
                  // =========================================================================================================== //
                  void MySocket::sendCommandMatrix(QString bValue)
                  {
                      m_webSocket.sendTextMessage(bValue);
                  }
                  // =========================================================================================================== //
                  // Socket Close
                  // =========================================================================================================== //
                  void MySocket::close()
                  {
                      m_webSocket.close();
                  }
                  
                  1 Reply Last reply
                  0
                  • mrjjM Offline
                    mrjjM Offline
                    mrjj
                    Lifetime Qt Champion
                    wrote on last edited by
                    #11

                    Hi
                    It looks fine but i wonder i QUrl likes an IP as that is what you give it.
                    Also those IPs. could that request HTTPS so that you need SSL compiled and enabled ?

                    K 2 Replies Last reply
                    0
                    • mrjjM mrjj

                      Hi
                      It looks fine but i wonder i QUrl likes an IP as that is what you give it.
                      Also those IPs. could that request HTTPS so that you need SSL compiled and enabled ?

                      K Offline
                      K Offline
                      Kris Revi
                      wrote on last edited by
                      #12

                      @mrjj i found out why!

                      Original :

                      Socket.doConnect(selected_board);
                      

                      Now :

                      Socket.doConnect(QStringLiteral("ws://%1:80").arg(selected_board));
                      
                      1 Reply Last reply
                      1
                      • mrjjM mrjj

                        Hi
                        It looks fine but i wonder i QUrl likes an IP as that is what you give it.
                        Also those IPs. could that request HTTPS so that you need SSL compiled and enabled ?

                        K Offline
                        K Offline
                        Kris Revi
                        wrote on last edited by
                        #13

                        @mrjj how do i do this in Qt C++

                        Python (custom Qt Signal)

                        error = pyqtSignal(QtNetwork.QAbstractSocket.SocketError)
                        

                        so that i can hookup error and connected signal to slots in mainwindow.cpp :)

                        1 Reply Last reply
                        0
                        • K Offline
                          K Offline
                          Kris Revi
                          wrote on last edited by
                          #14

                          I've put onError and onConnected under Q_SIGNALS: in the MySocket.h in the class!

                          now what?

                          mrjjM 1 Reply Last reply
                          0
                          • K Kris Revi

                            I've put onError and onConnected under Q_SIGNALS: in the MySocket.h in the class!

                            now what?

                            mrjjM Offline
                            mrjjM Offline
                            mrjj
                            Lifetime Qt Champion
                            wrote on last edited by
                            #15

                            @Kris-Revi

                            Hi
                            Then you have defined 3 new signals for your class.
                            Another class could now use the connect statement to
                            hook up a slot to your new signals.

                            However, for something to happen.
                            You must use

                            emit onConnected(); 
                            

                            somewhere in your code to actually "send" the signal
                            at the right times.

                            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