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

QTcpServer, QAbstractSocket

Scheduled Pinned Locked Moved General and Desktop
13 Posts 6 Posters 9.0k 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.
  • H Offline
    H Offline
    hpng
    wrote on last edited by
    #1

    Documentation has this:
    "bool QTcpServer::listen ( const QHostAddress & address = QHostAddress::Any, quint16 port = 0 )

    Tells the server to listen for incoming connections on address address and port port. If port is 0, a port is chosen automatically. If address is QHostAddress::Any, the server will listen on all network interfaces."

    Does "address" here means the external IP address on website somewhere (fictitious e.g. WeLikeDogs.com) or IP address on my development computer?

    Am I correct to assume the "port" is port on my computer, right?

    Likewise, documentation has this:
    "void QAbstractSocket::connectToHost ( const QString & hostName, quint16 port, OpenMode openMode = ReadWrite )
    Attempts to make a connection to hostName on the given port."
    Host name would be external host address like fictitious example, WeLoveYou.com, and
    "port" is the local port on my computer, right?

    1 Reply Last reply
    0
    • L Offline
      L Offline
      loladiro
      wrote on last edited by
      #2

      [quote]
      Does “address” here means the external IP address on website somewhere (fictitious e.g. WeLikeDogs.com) or IP address on my development computer?
      [/quote]
      QTcpServer starts a sever on your computer, so you have to give it the address you want it to listen on (e.g. 127.0.0.1 or 192.168.1.123).
      [quote]
      Am I correct to assume the “port” is port on my computer, right?
      [/quote]
      As your computer is the server, yes.
      [quote]
      Host name would be external host address like fictitious example, WeLoveYou.com, and
      “port” is the local port on my computer, right?
      [/quote]
      Yes.

      1 Reply Last reply
      0
      • K Offline
        K Offline
        koahnig
        wrote on last edited by
        #3

        This depends on your application.
        If you set up a server you allow other applications to connect to. Fictious names are more convenient to read, but otherwise it should not a difference in general. I guess ip address may change more often.

        For the client applications you should look at the documentation for "QTcpSocket ":http://doc.qt.nokia.com/4.7/qtcpsocket.html it will use the method you are refering. On the client you can use both the domain names like www.google.com and also Ip addresses.

        If you are not interested in connecting to somewhere in the internet, but locally in an internally network, you probably have to use ip addresses. Either something like 192.168.1.1 or even on the same machine for both applications 127.0.0.1.

        Vote the answer(s) that helped you to solve your issue(s)

        1 Reply Last reply
        0
        • J Offline
          J Offline
          jim_kaiser
          wrote on last edited by
          #4

          @ void QAbstractSocket::connectToHost ( const QString & hostName, quint16 port, OpenMode openMode = ReadWrite ) @

          bq. Host name would be external host address like fictitious example, WeLoveYou.com, and
          “port” is the local port on my computer, right?

          Er. I think loladiro has misread your second question. The answer is No. When you're doing a connectToHost(...), the port is that of the host and refers to a particular service. Like 80 for HTTP or 22 for SSH. Web-servers listen on port 80. When you connect to a website you would be connecting to that port, locally any port greater than 1024 is chosen because all ports less than 1024 are reserved for specific applications.

          1 Reply Last reply
          0
          • H Offline
            H Offline
            hpng
            wrote on last edited by
            #5

            Jim with respect to this:
            “void QAbstractSocket::connectToHost ( const QString & hostName, quint16 port, OpenMode openMode = ReadWrite )
            Attempts to make a connection to hostName on the given port.”

            hostName would be external hostname, like WeLikeJim.org for example.
            And Port would be the port used by WeLikeJim.org for connection on WeLikeJim.org's (remote) computer, and it is not port on my computer, right?

            1 Reply Last reply
            0
            • S Offline
              S Offline
              silver47
              wrote on last edited by
              #6

              bq. And Port would be the port used by WeLikeJim.org for connection on WeLikeJim.org’s (remote) computer, and it is not port on my computer, right?

              Right!
              @QTcpServer::listen (serverAddress, serverPort); //SERVER
              QAbstractSocket::connectToHost (serverAddress, serverPort); //CLIENT @

              Your Client's port will chosen automatically. You may know it as follows:
              @QAbstractSocket::localPort();@

              sorry for my english :(

              1 Reply Last reply
              0
              • J Offline
                J Offline
                jim_kaiser
                wrote on last edited by
                #7

                bq. hostName would be external hostname, like WeLikeJim.org for example.
                And Port would be the port used by WeLikeJim.org for connection on WeLikeJim.org’s (remote) computer, and it is not port on my computer, right?

                Right!

                Of course, you could also connect to a port on your own machine too. if you're running two applications which need to communicate on the same machine, one could be running a tcp server or "someport".. and the other can then connect to "someport".

                Basically its the port on the host you're connecting to.

                1 Reply Last reply
                0
                • H Offline
                  H Offline
                  hpng
                  wrote on last edited by
                  #8

                  Thanks Jim.
                  Here is what I have not done before.
                  How do I go about testing two applications talking with each other using QTcpServer on the same computer, e.g. laptop, via local host address?
                  I have not done this before.

                  Someone suggest using separate physical servers, but I need to do preliminary testing on my laptop first.

                  I wish there is an example code of doing this.
                  I saw the example in the sample, but I do not think it is of any use. I am writing an app using QTcpServer, and QAbstractSocket.
                  I am just surprise there is no good example.

                  Basically, I like to know what addresses and ports do I need to use to do such simulation via localhost and local ports.
                  How many such local address and ports can I use to simulate multiple connections between multiple apps.
                  Hope all this makes sense.

                  .

                  1 Reply Last reply
                  0
                  • J Offline
                    J Offline
                    jim_kaiser
                    wrote on last edited by
                    #9

                    At work, my project is a reporting tool, which communicates with our flagship software running on the same machine, to make requests both ways and report the results of a simulation and more advanced communication. Will post an example, when I get the time.

                    bq. Someone suggest using separate physical servers, but I need to do preliminary testing on my laptop first.

                    It depends on what you need to test. Since, running both apps on same machine is just connections at localhost (127.0.0.1), you cannot test certain network problems or features, which might need a real scenario, in which case VM's or a cheap server as suggested elsewhere sounds like a good option.

                    Ofcourse, you cannot use ports less than 1024 for your applications. You can choose any random high port which is not being used already.

                    1 Reply Last reply
                    0
                    • G Offline
                      G Offline
                      goetz
                      wrote on last edited by
                      #10

                      [quote author="hpng" date="1308897923"]
                      Basically, I like to know what addresses and ports do I need to use to do such simulation via localhost and local ports.
                      How many such local address and ports can I use to simulate multiple connections between multiple apps.
                      Hope all this makes sense.
                      .[/quote]

                      You choose the address and port :-)

                      If the server listens on all addresses, then connecting to 127.0.0.1 should be sufficient. Otherwise connect to the public address of your machine (public in the sense of a non-localhost address).

                      Your client chooses the appropriate ip address depending on the destination's address and some free port for its communication, nothing to handle there.

                      http://www.catb.org/~esr/faqs/smart-questions.html

                      1 Reply Last reply
                      0
                      • H Offline
                        H Offline
                        hpng
                        wrote on last edited by
                        #11

                        Thanks Volker.

                        bq.
                        You choose the address and port :-)

                        If the server listens on all addresses, then connecting to 127.0.0.1 should be sufficient. Otherwise connect to the public address of your machine (public in the sense of a non-localhost address).

                        Your client chooses the appropriate ip address depending on the destination’s address and some free port for its communication, nothing to handle there.
                        bq.

                        I thing the following presentation may clear up my understanding:

                        OK, so let say I pick localhost address (127.0.0.1 ), and ports like these:

                        Port address Unofficial use by:
                        9999 Urchin Web Analytics Unofficial
                        10000 Webmin—Web-based Linux admin tool

                        So if I have

                        We want to do basic communication testing between App#1 and App#2 on same computer.
                        Let say App# is using QHostAddress(127.0.0.1) and port # 10000
                        App#2 is using QHostAddress(127.0.0.1) and port # 9999;

                        So to talk to App#2, here is App#1 Psuedo code:
                        @
                        QTcpServer TcpServer1;
                        QAbstractSocket* pTcpSocket1;
                        QHostAddress(127..0.0.1);
                        //Listening for App#2
                        TcpServer1.listen( QHostAddress(127.0.0.1), 9999 );
                        ....
                        .....
                        //Connecting to App#2
                        pTcpSocket1 = TcpServer1.nextPendingConnection();
                        ......
                        ...

                        App#2
                        App#2 to talk to App#1, here is App#2 Psuedo code:
                        QTcpServer TcpServer2;
                        QAbstractSocket* pTcpSocket2;
                        QHostAddress(127..0.0.1);
                        //Listening for App#1
                        TcpServer2.listen( QHostAddress(127.0.0.1), 10000 );
                        ....
                        .....
                        //Connecting to App#1
                        pTcpSocket2 = TcpServer2.nextPendingConnection();
                        ......
                        ...
                        @

                        Would this work to allow for App#1 and App#2 to send data between each other on SAME computer ?

                        1 Reply Last reply
                        0
                        • K Offline
                          K Offline
                          koahnig
                          wrote on last edited by
                          #12

                          hpng,

                          you could probably create two applications based on your pseudo code. Establishing two servers is possible, but not necessary. Typically you have one server application and one client application. The server application would use QTcpServer as you have done. The client application would use QTcpSocket and open the connection. In the server application you would establish a socket similar to your mimick above. This allows communication in both ways. There is no need to setup the same on both sides.

                          However, I wonder if you have seen the examples provided by Qt. There is the "fortune server application":http://doc.qt.nokia.com/4.7/network-fortuneserver.html . If you use this as a start and also the Fortune client application, you should be able to walk through the requirements and make modifications as you need.

                          This might be more effective for you to understand and move forward. Especially, since there is already running code available.

                          Certainly you can come back and ask questions, if they arise then.

                          Vote the answer(s) that helped you to solve your issue(s)

                          1 Reply Last reply
                          0
                          • G Offline
                            G Offline
                            goetz
                            wrote on last edited by
                            #13

                            Both applications just open a server listening on ports 9999 and 10000. None of the applications is actually trying to connect to a server.

                            As koahnig already pointed out, have a look at the fortune server app, it demonstrates what you want.

                            http://www.catb.org/~esr/faqs/smart-questions.html

                            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