【问题标题】:QSslSocket return Invalid urlQSslSocket 返回无效的 url
【发布时间】:2014-03-27 16:25:53
【问题描述】:

我正在拼命尝试设置 QSslSocket 连接,我尝试从黑莓示例开始,但总是在我的控制台上收到 Invalid URL 错误,没有任何详细信息... 这是我尝试运行的代码:

    if (!m_socket) {

    bool res;
     Q_UNUSED(res);
    m_socket = new QSslSocket();

    // Connect to signals to receive notifications
    // about state changes

    res = QObject::connect(m_socket,
                SIGNAL(sslErrors(QList<QSslError>)),
                this,
                SLOT(onSslErrors(QList<QSslError>)));

    Q_ASSERT(res);

    res = QObject::connect(m_socket,
            SIGNAL(stateChanged(QAbstractSocket::SocketState)),
            this,
            SLOT(onSocketSateChange(QAbstractSocket::SocketState)));
    Q_ASSERT(res);

    res = QObject::connect(m_socket,
                    SIGNAL(error ( QAbstractSocket::SocketError)),
                    this,
                    SLOT(onError(QAbstractSocket::SocketError)));
            Q_ASSERT(res);

    res = QObject::connect(m_socket, SIGNAL(encrypted()),
            this,
            SLOT(onSocketEncrypted()));
    Q_ASSERT(res);

    res = QObject::connect(m_socket, SIGNAL(readyRead()),
            this,
            SLOT(onSocketReadyRead()));
    Q_ASSERT(res);


}

// Make the SSL connection to the host on the specified port
m_socket->connectToHostEncrypted("www.blackberry.com", 443);

 /* if (!m_socket->waitForEncrypted()) {
    qDebug() << m_socket->errorString();
    //return 1;
}
 */
 }

如果有人可以帮助或向我展示一个 ssl 示例工作...

【问题讨论】:

    标签: qt blackberry-10 qnx


    【解决方案1】:

    这是客户端的示例 SSL 连接。我通过以下代码连接到“www.blackberry.com”,443:

    SSLClient::SSLClient(QObject *parent)
    {
    
        if (!QSslSocket::supportsSsl())
           QMessageBox::information(0, "Secure Socket Client",
                     "This system does not support OpenSSL.");
    
        client_socket.setProtocol(QSsl::SslV3);
    
        connect( &client_socket, SIGNAL(error(QAbstractSocket::SocketError)),
                this, SLOT(TCPError(QAbstractSocket::SocketError)) );
    
        connect( &client_socket, SIGNAL(sslErrors(QList<QSslError>)),
                this, SLOT(sslError(QList<QSslError>)) );
    
        connect( &client_socket, SIGNAL(readyRead()),
                this, SLOT(tcpReady()) );
    
        connect( &client_socket, SIGNAL(encrypted()),
                 this, SLOT(enable_client()) );
    
        client_socket.abort();
        client_socket.connectToHostEncrypted("www.blackberry.com", 443 );
    
    
    }
    
    
    void SSLClient::tcpReady()
    {
        QByteArray array = client_socket.read( client_socket.bytesAvailable() );
        QString str;
    
    
        QTextCodec *codec = QTextCodec::codecForName("UTF-16");
        QTextDecoder  *decoderWithoutBom = codec->makeDecoder(QTextCodec::IgnoreHeader );
        str  = decoderWithoutBom->toUnicode(array);
    
    }
    
    void SSLClient::sslError(QList<QSslError> errors)
    {
    
        client_socket.ignoreSslErrors();
    
    }
    
    void SSLClient::TCPError(QAbstractSocket::SocketError error)
    {
    
        QMessageBox::warning( this, tr("Error"),client_socket.errorString() );
    
        client_socket.disconnectFromHost();
    }
    

    【讨论】:

    • 感谢 Nejat,事实上我的代码可以正常工作,我成功地管理了我的 CA 并且所有东西都正常工作,但是我的控制台中出现了两次无效 URL,我认为 qsssocket 尝试了密钥库拥有的所有 CA 并且所以前两次失败了...我应该尝试设置一个默认值...
    猜你喜欢
    • 2018-04-17
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    相关资源
    最近更新 更多