Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. Sending messages from a client to server using network on the same machine
QtWS25 Last Chance

Sending messages from a client to server using network on the same machine

Scheduled Pinned Locked Moved Unsolved QML and Qt Quick
31 Posts 4 Posters 5.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.
  • S Offline
    S Offline
    SGaist
    Lifetime Qt Champion
    wrote on 31 Mar 2022, 20:32 last edited by
    #21

    Are you using the Fortune client and server examples as a base ?
    If so, please take a look at the server side implementation, QDataStream is used there to write the data in a QByteArray that is then written in the socket. The transaction handling happens on the receiving end.

    Interested in AI ? www.idiap.ch
    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

    Q 1 Reply Last reply 31 Mar 2022, 20:54
    1
    • S SGaist
      31 Mar 2022, 20:32

      Are you using the Fortune client and server examples as a base ?
      If so, please take a look at the server side implementation, QDataStream is used there to write the data in a QByteArray that is then written in the socket. The transaction handling happens on the receiving end.

      Q Offline
      Q Offline
      qcoderpro
      wrote on 31 Mar 2022, 20:54 last edited by
      #22

      @SGaist

      Are you using the Fortune client and server examples as a base ?

      Partly.

      QDataStream is used there to write the data in a QByteArray that is then written in the socket.

      I didn't know QString wouldn't work, but anyway, it's now changed to:

      void Client::sendMessage(const QString& message)
      {
          QByteArray block;
          QDataStream out(&block, QIODevice::WriteOnly);
          out.setVersion(QDataStream::Qt_5_10);
          out << message;
      }
      

      But still no change in the result! :|

      The transaction handling happens on the receiving end.

      Yes, it's implemented in the setMessage() slot.

      J 1 Reply Last reply 1 Apr 2022, 06:38
      0
      • Q qcoderpro
        31 Mar 2022, 20:54

        @SGaist

        Are you using the Fortune client and server examples as a base ?

        Partly.

        QDataStream is used there to write the data in a QByteArray that is then written in the socket.

        I didn't know QString wouldn't work, but anyway, it's now changed to:

        void Client::sendMessage(const QString& message)
        {
            QByteArray block;
            QDataStream out(&block, QIODevice::WriteOnly);
            out.setVersion(QDataStream::Qt_5_10);
            out << message;
        }
        

        But still no change in the result! :|

        The transaction handling happens on the receiving end.

        Yes, it's implemented in the setMessage() slot.

        J Offline
        J Offline
        jsulm
        Lifetime Qt Champion
        wrote on 1 Apr 2022, 06:38 last edited by
        #23

        @qcoderpro said in Sending messages from a client to server using network on the same machine:

        But still no change in the result!

        Because sendMessage does not send anything.
        It only writes the message into a QByteArray.
        You also need to send that QByteArray through the socket.

        https://forum.qt.io/topic/113070/qt-code-of-conduct

        Q 1 Reply Last reply 1 Apr 2022, 07:43
        1
        • J jsulm
          1 Apr 2022, 06:38

          @qcoderpro said in Sending messages from a client to server using network on the same machine:

          But still no change in the result!

          Because sendMessage does not send anything.
          It only writes the message into a QByteArray.
          You also need to send that QByteArray through the socket.

          Q Offline
          Q Offline
          qcoderpro
          wrote on 1 Apr 2022, 07:43 last edited by
          #24

          @jsulm
          Yeah, right, so I added this line at the end of the slot:
          tcpSocket->write(block);
          But I think there's an earlier problem. No connection arrives. I set a debug in the onNewConnection() slot in the server app but nothing is printed although I put the IP and port in the client and click on the "Send Address" button! :|

          J 1 Reply Last reply 1 Apr 2022, 07:49
          0
          • Q qcoderpro
            1 Apr 2022, 07:43

            @jsulm
            Yeah, right, so I added this line at the end of the slot:
            tcpSocket->write(block);
            But I think there's an earlier problem. No connection arrives. I set a debug in the onNewConnection() slot in the server app but nothing is printed although I put the IP and port in the client and click on the "Send Address" button! :|

            J Offline
            J Offline
            jsulm
            Lifetime Qt Champion
            wrote on 1 Apr 2022, 07:49 last edited by
            #25

            @qcoderpro Then you should debug on the client side

            https://forum.qt.io/topic/113070/qt-code-of-conduct

            Q 1 Reply Last reply 1 Apr 2022, 10:37
            0
            • J jsulm
              1 Apr 2022, 07:49

              @qcoderpro Then you should debug on the client side

              Q Offline
              Q Offline
              qcoderpro
              wrote on 1 Apr 2022, 10:37 last edited by qcoderpro 4 Jan 2022, 10:38
              #26

              @jsulm

              The client's sendAddress slot sends the IP and port number as a string and int respectively, based on this version. So that connection is expected to be received in the server's NewConnection() slot, but it doesn't, I don't know why! :|

              J 1 Reply Last reply 1 Apr 2022, 10:50
              0
              • Q qcoderpro
                1 Apr 2022, 10:37

                @jsulm

                The client's sendAddress slot sends the IP and port number as a string and int respectively, based on this version. So that connection is expected to be received in the server's NewConnection() slot, but it doesn't, I don't know why! :|

                J Offline
                J Offline
                jsulm
                Lifetime Qt Champion
                wrote on 1 Apr 2022, 10:50 last edited by
                #27

                @qcoderpro said in Sending messages from a client to server using network on the same machine:

                sendAddress slot sends the IP and port number

                It does not send anything, it just calls connectToHost. Did you check what happens on client side? Is https://doc.qt.io/qt-5/qabstractsocket.html#connected emitted? Is https://doc.qt.io/qt-5/qabstractsocket.html#errorOccurred signal emitted?

                https://forum.qt.io/topic/113070/qt-code-of-conduct

                Q 1 Reply Last reply 1 Apr 2022, 11:10
                0
                • J jsulm
                  1 Apr 2022, 10:50

                  @qcoderpro said in Sending messages from a client to server using network on the same machine:

                  sendAddress slot sends the IP and port number

                  It does not send anything, it just calls connectToHost. Did you check what happens on client side? Is https://doc.qt.io/qt-5/qabstractsocket.html#connected emitted? Is https://doc.qt.io/qt-5/qabstractsocket.html#errorOccurred signal emitted?

                  Q Offline
                  Q Offline
                  qcoderpro
                  wrote on 1 Apr 2022, 11:10 last edited by
                  #28

                  @jsulm

                  I set this in the client's sendAddress slot:

                  connect(tcpSocket, &QAbstractSocket::connected, []() {
                         qDebug() << "Connected to the host";
                     });
                  

                  And it prints that message on Application Output window. So the connection is assumed to be established correctly without errors. Right?

                  Q 1 Reply Last reply 1 Apr 2022, 19:40
                  0
                  • Q qcoderpro
                    1 Apr 2022, 11:10

                    @jsulm

                    I set this in the client's sendAddress slot:

                    connect(tcpSocket, &QAbstractSocket::connected, []() {
                           qDebug() << "Connected to the host";
                       });
                    

                    And it prints that message on Application Output window. So the connection is assumed to be established correctly without errors. Right?

                    Q Offline
                    Q Offline
                    qcoderpro
                    wrote on 1 Apr 2022, 19:40 last edited by
                    #29

                    No further contribution? :(

                    B 1 Reply Last reply 1 Apr 2022, 20:33
                    0
                    • Q qcoderpro
                      1 Apr 2022, 19:40

                      No further contribution? :(

                      B Offline
                      B Offline
                      Bob64
                      wrote on 1 Apr 2022, 20:33 last edited by
                      #30

                      @qcoderpro I'd suggest that you go back to the fortune example and debug what is happening on the client and server side until you have a good understanding. I found it very useful when I was figuring out how Qt did sockets.

                      Do you have any background with sockets at all? If not, I wonder if it would be worth having a play around with something like Python first to firm up the ideas. The official Python docs on sockets are very good.

                      Q 1 Reply Last reply 1 Apr 2022, 20:41
                      0
                      • B Bob64
                        1 Apr 2022, 20:33

                        @qcoderpro I'd suggest that you go back to the fortune example and debug what is happening on the client and server side until you have a good understanding. I found it very useful when I was figuring out how Qt did sockets.

                        Do you have any background with sockets at all? If not, I wonder if it would be worth having a play around with something like Python first to firm up the ideas. The official Python docs on sockets are very good.

                        Q Offline
                        Q Offline
                        qcoderpro
                        wrote on 1 Apr 2022, 20:41 last edited by
                        #31

                        @Bob64
                        The fortune client/server apps are different from (at least) that point of view that the server sends messages to the client by a button on the client. It's way different from mine.
                        Well, these two QML apps are considerably simple but I don't know why we (helpers and me) can't work it out and get them to work! :(

                        1 Reply Last reply
                        0

                        30/31

                        1 Apr 2022, 20:33

                        • Login

                        • Login or register to search.
                        30 out of 31
                        • First post
                          30/31
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • Users
                        • Groups
                        • Search
                        • Get Qt Extensions
                        • Unsolved