QTCreator에서 매우 기본적인 서버/클라이언트 작업을 수행하고 있습니다. 클라이언트가 연결할 때 서버가 클라이언트에 인증서를 보내도록해야합니다. 서버에 다음 코드가 있습니다.QSslSocket 함수에 액세스하려고 할 때 서버가 다운 됨
void Dialog::createSocket()
{
tcpSocket = (QSslSocket*)tcpServer->nextPendingConnection();
QByteArray key;
QByteArray cert;
QByteArray block;
QFile fileKey("C:/Users/siu850967358.AD.002/Desktop/ECE424_Lab2/server.key");
if(fileKey.open(QIODevice ::ReadOnly))
{
key = fileKey.readAll();
fileKey.close();
}
else
{
qDebug() << fileKey.errorString();
}
QFile fileCert("C:/Users/siu850967358.AD.002/Desktop/ECE424_Lab2/server.crt");
if(fileCert.open(QIODevice ::ReadOnly))
{
cert = fileCert.readAll();
fileCert.close();
}
else
{
qDebug() << fileCert.errorString();
}
qDebug() << key + "\n" + cert;
QString mykey(cert);
QSslKey ssl_Key(key, QSsl::Rsa);
QSslKey* sslKey = &ssl_Key;
QSslCertificate ssl_Cert(cert);
QSslCertificate* sslCert = &ssl_Cert;
//CRASH HAPPENS HERE
qDebug() << "ok";
tcpSocket->setPrivateKey(ssl_Key);
qDebug() << "ok2";
tcpSocket->setLocalCertificate(ssl_Cert);
qDebug() << "Key and certificate set";
//CRASH HAPPENS HERE
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_0);
out << (quint16)0;
out << mykey;
out.device()->seek(0);
out << (quint16)(block.size() - sizeof(quint16));
qDebug() << "write the certificate to the socket so that client may get the pubkey";
tcpSocket->write(block);
//connect(tcpSocket, SIGNAL(encrypted()), this, SLOT(readSocket()));
connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(readSocket()));
tcpSocket->startServerEncryption();
}
tcpSocket-> setPrivateKey (ssl_Key); 충돌을 일으킨다. tcpSocket-> setPrivateKey (key); does not는 충돌을 일으킨다. 그러나 나는 그것이 틀리다라고 생각한다. ... tcpSocket-> setLocalCertificate()와 같은 거래.
어떤 아이디어 ?? 이 위치에서 btw 너무 추락합니다 ... 미리 감사드립니다