2014-03-27 7 views
0

필자는 QSslSocket 연결을 필사적으로 설정하려고하는데 블랙 베리 샘플로 시작하려고하지만 내 세부 정보없이 항상 내 콘솔에서 잘못된 URL 오류가 발생합니다 ... 실행하려고 시도한 코드는 다음과 같습니다.QSslSocket return 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 샘플 작업을 보여줄 수 있다면 ...

답변

0

이 클라이언트 측에서 샘플 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(); 
} 
+0

Nejat은, 사실 내 코드가 작동하는 덕분에, 난 내 CA 모든 물건의 작업을 관리 할 수 ​​succeded,하지만 난 두 번 나타나는 잘못된 URL이 내 콘솔에서 qssocket은 모든 CA에 키 저장소가 있고 처음 2 번 실패 했으므로 ... 기본 키를 설정해야한다고 생각합니다. – user3469381