首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用QSslSocket::startServerEncryption,但没有任何反应

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

Stack Overflow用户
提问于 2013-01-06 19:08:23
回答 2查看 1.8K关注 0票数 3

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

但是在调用serverSocket->startServerEncryption();之后,什么也不会发生--既不会发出encrypted()信号,也不会发出sslErrors()信号(我已经在与它们连接的插槽中设置了断点)。

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

这是我为服务器编写的代码:

代码语言:javascript
复制
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;
    }
}

这就是我连接它的方式:

代码语言:javascript
复制
server = new SslServer(this);
server->listen(QHostAddress::Any, 3333);
QSslSocket *socket = new QSslSocket(this);
socket->connectToHostEncrypted("127.0.0.1", 3333);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-07 00:00:07

根据documentation的说法:

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

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

票数 3
EN

Stack Overflow用户

发布于 2013-01-06 19:29:18

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14181507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档