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