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

时间:2013-01-06 11:08:23

标签: 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);

2 个答案:

答案 0 :(得分:2)

根据documentation

  

如果要创建SSL服务器套接字,则需要密钥和本地证书。

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

答案 1 :(得分:0)

SSH不是SSL。 SSH客户端等待来自服务器的初始数据,而SSL客户端首先发送数据。所以他们都在等待来自另一方的数据。