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

Client-server application

Scheduled Pinned Locked Moved General and Desktop
24 Posts 7 Posters 12.6k 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.
  • Z Offline
    Z Offline
    za83
    wrote on last edited by
    #7

    Do I have to use QSslSocket?
    I'd like to look at simple client and server example.

    1 Reply Last reply
    0
    • Q Offline
      Q Offline
      qxoz
      wrote on last edited by
      #8

      I am never used QSslSocket here are some examples:
      "http://www.developer.nokia.com/Community/Wiki/Sample_QSslSocket_Example":http://www.developer.nokia.com/Community/Wiki/Sample_QSslSocket_Example
      "http://qt-project.org/forums/viewthread/21401":http://qt-project.org/forums/viewthread/21401
      "http://doc.qt.digia.com/4.7/network-securesocketclient.html":http://doc.qt.digia.com/4.7/network-securesocketclient.html

      1 Reply Last reply
      0
      • A Offline
        A Offline
        andre
        wrote on last edited by
        #9

        Using an SSL socket is not that much more complicated than using a plain TCP socket. If you are going to allow authentication based on a token, you should IMHO not exchange this token in plain text over an open connection. Not unless you really want your application to get hacked...

        1 Reply Last reply
        0
        • Z Offline
          Z Offline
          za83
          wrote on last edited by
          #10

          Are there any complete simple examples for server?

          1 Reply Last reply
          0
          • Q Offline
            Q Offline
            qxoz
            wrote on last edited by
            #11

            In links above you can find what you need. Read docs and do little bit effort.

            1 Reply Last reply
            0
            • Z Offline
              Z Offline
              za83
              wrote on last edited by
              #12

              I did enough efforts but I have never worked with SSL. Example would help me.
              http://qt-project.org/forums/viewthread/21401 this is server example. But I don't know how can I make it working.

              This attempt does not work.
              [CODE]
              #include <QApplication>
              #include <QtNetwork/QSslSocket>
              #include <QDebug>

              class Server : public QObject
              {
              public:
              void f()
              {
              m_socket = new QSslSocket(this);
              m_socket->setSocketDescriptor(handle);
              m_socket->setProtocol(QSsl::SslV3);

                  QByteArray key;
                  QByteArray cert;
              
                  QFile file_key("../ssl/server.key");
                  if(file_key.open(QIODevice::ReadOnly))
                  {
                      key = file_key.readAll();
                      file_key.close();
                  }
                  else
                  {
                      qDebug() << file_key.errorString();
                  }
              
                  QFile file_cert("../ssl/server.crt");
                  if(file_cert.open(QIODevice::ReadOnly))
                  {
                      cert = file_cert.readAll();
                      file_cert.close();
                  }
                  else
                  {
                      qDebug() << file_cert.errorString();
                  }
              
                  //qDebug() << key + "\n" + cert;
              
              
                  QSslKey ssl_key(key, QSsl::Rsa);
              
                  QSslCertificate ssl_cert(cert);
              
                  m_socket->setPrivateKey(ssl_key);
                  m_socket->setLocalCertificate(ssl_cert);
                  m_socket->startServerEncryption();
              }
              

              private:
              QSslSocket m_socket;
              };

              int main( int argc, char **argv )
              {
              Server server;
              server.f();
              }
              [/CODE]

              1 Reply Last reply
              0
              • A Offline
                A Offline
                andre
                wrote on last edited by
                #13

                Of course not! You are not even creating an application object, you are not starting an event loop, etc. Did you actually look at the examples that were referenced?

                1 Reply Last reply
                0
                • Z Offline
                  Z Offline
                  za83
                  wrote on last edited by
                  #14

                  I worked with QT long ago. But I thought this code must be though compiling. Isn't it?

                  1 Reply Last reply
                  0
                  • SGaistS Offline
                    SGaistS Offline
                    SGaist
                    Lifetime Qt Champion
                    wrote on last edited by
                    #15

                    In addition to what Andre said: Are sure that "../ssl/server.crt" is the right path ?

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

                    1 Reply Last reply
                    0
                    • Z Offline
                      Z Offline
                      za83
                      wrote on last edited by
                      #16

                      I created an application object but code is still not compiling as I expected.
                      main.cpp:10: error: no match for 'operator=' in '((Server*)this)->Server::m_socket = (operator new(8u), (<statement>, ((QSslSocket*)<anonymous>)))'
                      [code]
                      #include <QApplication>
                      #include <QtNetwork/QSslSocket>
                      #include <QDebug>

                      class Server : public QObject
                      {
                      public:
                      void f()
                      {
                      m_socket = new QSslSocket(this);
                      m_socket->setSocketDescriptor(handle);
                      m_socket->setProtocol(QSsl::SslV3);

                          QByteArray key;
                          QByteArray cert;
                      
                          QFile file_key("../ssl/server.key");
                          if(file_key.open(QIODevice::ReadOnly))
                          {
                              key = file_key.readAll();
                              file_key.close();
                          }
                          else
                          {
                              qDebug() << file_key.errorString();
                          }
                      
                          QFile file_cert("../ssl/server.crt");
                          if(file_cert.open(QIODevice::ReadOnly))
                          {
                              cert = file_cert.readAll();
                              file_cert.close();
                          }
                          else
                          {
                              qDebug() << file_cert.errorString();
                          }
                      
                          //qDebug() << key + "\n" + cert;
                      
                      
                          QSslKey ssl_key(key, QSsl::Rsa);
                      
                          QSslCertificate ssl_cert(cert);
                      
                          m_socket->setPrivateKey(ssl_key);
                          m_socket->setLocalCertificate(ssl_cert);
                          m_socket->startServerEncryption();
                      }
                      

                      private:
                      QSslSocket m_socket;
                      };

                      int main( int argc, char **argv )
                      {
                      QApplication app(argc, argv);

                      if (!QSslSocket::supportsSsl()) {
                      QMessageBox::information(0, "Secure Socket Server",
                                   "This system does not support OpenSSL.");
                          return -1;
                      }
                      
                      Server server;
                      server.f();
                      
                      return app.exec(&#41;;
                      

                      }
                      [/code]

                      1 Reply Last reply
                      0
                      • SGaistS Offline
                        SGaistS Offline
                        SGaist
                        Lifetime Qt Champion
                        wrote on last edited by
                        #17

                        Have a look at the declaration of m_socket

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

                        1 Reply Last reply
                        0
                        • Z Offline
                          Z Offline
                          za83
                          wrote on last edited by
                          #18

                          Thanks.
                          error: variable 'QSslKey ssl_key' has initializer but incomplete type (Solved #include <QtNetwork/QSslKey>)

                          1 Reply Last reply
                          0
                          • Z Offline
                            Z Offline
                            za83
                            wrote on last edited by
                            #19

                            How to include libs?
                            I wrote
                            [code]
                            LIBS += -L/C:/OpenSSL-Win32/lib ssleay32.lib libeay32.lib
                            [/code]
                            error: ssleay32.lib: No such file or directory

                            1 Reply Last reply
                            0
                            • SGaistS Offline
                              SGaistS Offline
                              SGaist
                              Lifetime Qt Champion
                              wrote on last edited by
                              #20

                              That's not all for m_socket.

                              Please, search the documentation a bit "Other libraries":http://qt-project.org/doc/qt-4.8/qmake-project-files.html#declaring-other-libraries

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

                              1 Reply Last reply
                              0
                              • Z Offline
                                Z Offline
                                za83
                                wrote on last edited by
                                #21

                                Thanks but unfortunately it does not help me.

                                main.cpp:13: error: undefined reference to _imp___ZN10QSslSocketC1EP7QObject' main.cpp:15: error: undefined reference to _imp___ZN10QSslSocket11setProtocolEN4QSsl11SslProtocolE'
                                main.cpp:45: error: undefined reference to _imp___ZN7QSslKeyC1ERK10QByteArrayN4QSsl12KeyAlgorithmENS3_14EncodingFormatENS3_7KeyTypeES2_' main.cpp:47: error: undefined reference to _imp___ZN15QSslCertificateC1ERK10QByteArrayN4QSsl14EncodingFormatE'
                                main.cpp:49: error: undefined reference to _imp___ZN10QSslSocket13setPrivateKeyERK7QSslKey' main.cpp:50: error: undefined reference to _imp___ZN10QSslSocket19setLocalCertificateERK15QSslCertificate'
                                main.cpp:51: error: undefined reference to _imp___ZN10QSslSocket21startServerEncryptionEv' main.cpp:51: error: undefined reference to _imp___ZN15QSslCertificateD1Ev'
                                main.cpp:51: error: undefined reference to _imp___ZN7QSslKeyD1Ev' main.cpp:45: error: undefined reference to _imp___ZN7QSslKeyD1Ev'
                                main.cpp:51: error: undefined reference to _imp___ZN15QSslCertificateD1Ev' main.cpp:51: error: undefined reference to _imp___ZN7QSslKeyD1Ev'

                                1 Reply Last reply
                                0
                                • SGaistS Offline
                                  SGaistS Offline
                                  SGaist
                                  Lifetime Qt Champion
                                  wrote on last edited by
                                  #22

                                  Sure it helps, that's a new error. Did you build Qt with ssl support ?

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

                                  1 Reply Last reply
                                  0
                                  • Z Offline
                                    Z Offline
                                    za83
                                    wrote on last edited by
                                    #23

                                    I did not build Qt. I just installed it on Windows.
                                    How can I do it? Can I use that build for commercial applications under LGPL?

                                    1 Reply Last reply
                                    0
                                    • T Offline
                                      T Offline
                                      tobias.hunger
                                      wrote on last edited by
                                      #24

                                      You are ship your commercial applications under LGPL license? Those are of course compatible with LGPL Qt.

                                      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