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