c++ - 调用 QSslSocket::startServerEncryption,但没有任何反应

标签 c++ qt sockets ssl qsslsocket

我正在尝试使用 Qt 文档中的示例代码实现 SSL 服务器。

但是在 serverSocket->startServerEncryption(); 被调用之后,什么也没有发生——无论是 encrypted() 还是 sslErrors() 信号被发出(我在连接它们的插槽中放置了断点)。

我通过使用 connectToHostEncrypted 将 QSslSocket 连接到我正在监听的端口来测试它。套接字发送数据,但我的服务器没有响应(我正在使用 TCP 嗅探器/代理来查看从客户端发送到服务器以及从服务器发送到客户端的所有数据)。

这是我的服务器代码:

void SslServer::incomingConnection(int socketDescriptor)
{
    qDebug() << "SslServer::incomingConnection()";
    QSslSocket *serverSocket = new QSslSocket(this);
    if (serverSocket->setSocketDescriptor(socketDescriptor)) {
        connect(serverSocket, SIGNAL(encrypted()), this, SLOT(ready()));
        connect(serverSocket, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(sslErrors(QList<QSslError>)));
        serverSocket->startServerEncryption();
    } else {
        delete serverSocket;
    }
}

这就是我连接它的方式:

server = new SslServer(this);
server->listen(QHostAddress::Any, 3333);
QSslSocket *socket = new QSslSocket(this);
socket->connectToHostEncrypted("127.0.0.1", 3333);

最佳答案

根据documentation :

Both the key and the local certificate are required if you are creating an SSL server socket.

如果您不提供它们,套接字将发出“常规”error(QAbstractSocket::SocketError) 信号。正如您所发现的,服务器在这种情况下不会发送任何数据。

关于c++ - 调用 QSslSocket::startServerEncryption,但没有任何反应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14181507/

相关文章:

c++ system()挂起使用netcat连接到不同线程中的套接字

c++ - 如何将矩阵提升为具有多个线程的幂?

c++ - 关于函数参数和默认初始化的规则

c++ - 用于部署 Qt 应用程序的文件

c++ - Qt - drawPolyline 和 drawLine 之间的区别

linux - 禁用 UDP 广播的自接收

c++ - cpp中dll的引用类

c# - 我对这个 C++ 函数的 C# DLL 导入的编码(marshal)处理有什么问题?

c++ - QtCreator LNK2019 外部库错误

Java套接字超时错误