我拼命想要设置QSslSocket连接,我尝试从黑莓样本开始,但总是在我的控制台上收到无效的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 :(得分:0)
这是客户端的SSL连接示例。我通过以下代码连接到&#34; www.blackberry.com&#34;,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();
}