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
Forum Updated to NodeBB v4.3 + New Features

QWebSocket wont connect or give error

Scheduled Pinned Locked Moved Solved General and Desktop
15 Posts 3 Posters 2.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