Russian Qt Forum
Ноябрь 22, 2024, 14:12 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSslSocket консольный эхо-сервер  (Прочитано 2275 раз)
Gregory_E
Гость
« : Март 03, 2018, 11:36 »

Здравствуйте. Мне надо реализовать консольный (среда Ubuntu), клиент-сервер, для обмена короткими текстовыми данными. И данные должны быть зашифрованы. Я попробовал реализовать на QSslSocket, но до конца не понимаю как все должно работать. Нужны ли клиенту изначально указанные в коде ключ/сертификат ? Был бы рад примеру кода.

main:
Код
C++ (Qt)
#include <QCoreApplication>
#include <QTcpServer>
#include <QSslSocket>
#include <QObject>
#include "sslserver.h"
 
 
 
int main(int argc, char *argv[])
{
   QCoreApplication a(argc, argv);
 
 
 
   SslServer server(4242);
 
 
 
   return a.exec();
}
 
[b]sslserver.h:[/b]
#ifndef SSLSERVER_H
#define SSLSERVER_H
 
#include <QCoreApplication>
#include <QTcpServer>
#include <QSslSocket>
#include <QObject>
#include <QDebug>
 
 
 
class SslServer : public QTcpServer
{
   Q_OBJECT
public:
    SslServer(QObject *parent = 0);
    SslServer(int portN);
    SslServer() = default;
private:
   int port;
   void incomingConnection(int handle);
   QSslSocket *socket;
signals:
   void message(QString);
public slots:
   void on_encrypted();
   void on_dataRead();
};
 
 
 
#endif // SSLSERVER_H

sslserver.cpp:
Код
C++ (Qt)
#include "sslserver.h"
 
 
 
SslServer::SslServer(QObject *parent) :
   QTcpServer(parent)
{
 
   //listen(QHostAddress::Any, port);
}
 
 
 
SslServer::SslServer(int portN)
{
   port = portN;
   listen(QHostAddress::Any, port);
}
 
void SslServer::incomingConnection(int handle)
{
   socket = new QSslSocket(this);
 
   if (socket->setSocketDescriptor(handle))
   {
       qDebug() << "Incoming connection.";
 
       connect(socket, SIGNAL(encrypted()), this, SLOT(on_encrypted()));
       connect(socket, SIGNAL(readyRead()), this, SLOT(on_dataRead()));
 
       socket->setPrivateKey("/home/gregory/rootCA.key", QSsl::Rsa);
       socket->setLocalCertificate("/home/gregory/rootCA.crt");
       socket->startServerEncryption();
 
       emit message("New connection...\r\n");
       foreach(QSslError err, socket->sslErrors())
       {
           emit message(QString(err.errorString()).append("\r\n"));
       }
 
   }
   else {
       //qDebug() << "Else";
       delete socket;
   }
}
void SslServer::on_dataRead()
{
   QByteArray arr = socket->readAll();
   emit message(QString(arr).append("\r\n"));
 
}
void SslServer::on_encrypted()
{
   emit message(QString("Encrypted... \r\n"));
}
« Последнее редактирование: Март 04, 2018, 09:24 от gil9red » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.12 секунд. Запросов: 21.