Здравствуйте, у меня возникла проблема с QSslSocket. Клиенту удается подключиться, но отправлять сообщение клиенту удается только до строчки sslSocket->startServerEncryption(); Ниже представлен код сервера:
#include "qsslserverclass.h"
#include <QDebug>
QSSLServerClass::QSSLServerClass(int portServ, QObject *parent)
: QTcpServer(parent)
{
portServer = portServ;
}
bool QSSLServerClass::startServer()
{
if(!listen(QHostAddress::Any,portServer)){
qDebug()<<"error";
close();
return false;
} else{
return true;
}
}
void QSSLServerClass::incomingConnection(qintptr handle)
{
qDebug()<<"incomingConnection on socket:"<< handle;
emit(signalNewConnection(handle));
// new QSSLServerConnectionClass(handle, this);
servclass = new QSSLServerConnectionClass(handle,this);
}
void QSSLServerClass::slotSendMes(QString str)
{
qDebug()<<"2"<<str;
servclass->SendMes(str);
}
QSSLServerConnectionClass::QSSLServerConnectionClass(quint16 socketNum, QObject *parent)
: QObject(parent)
{
sslSocket = new QSslSocket(this);
sslSocket->setSocketDescriptor(socketNum);
QFile certFile(QStringLiteral(":/certificate.pem"));//Написать свои?
QFile keyFile(QStringLiteral(":/private.key"));// Или оставить эти? Или заказать на сайте бесплатные?
certFile.open(QIODevice::ReadOnly);
keyFile.open(QIODevice::ReadOnly);
sslCertificate = new QSslCertificate(&certFile);
sslKey = new QSslKey(&keyFile,QSsl::Rsa);
certFile.close();
keyFile.close();
sslSocket->setLocalCertificate(*sslCertificate);
sslSocket->setPrivateKey(*sslKey);
sslSocket->setProtocol(QSsl::AnyProtocol);
connect(sslSocket,SIGNAL(connected()),this,SLOT(slotConnected()));
connect(sslSocket,SIGNAL(encrypted()),this,SLOT(slotReadyRead()));
connect(sslSocket,SIGNAL(disconnected()),this,SLOT(slotDisconnected()));
connect(sslSocket,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(slotSSLErrors(QAbstractSocket::SocketError)));
/////Отправляет
QByteArray array;
QString str = "[server]>> Hello my friend\n";
array.append(str);
sslSocket->write(array);
sslSocket->startServerEncryption();
/////уже не отправляет
QByteArray array;
QString str = "[server]>> Hello my friend\n";
array.append(str);
sslSocket->write(array);
}