[英]How to connect with server using Secure WebSocket in Qt c++
我正在創建應該能夠使用安全連接與服務器連接的Qt應用程序(即wss://xxx.xxx.xxx.xxx:8080),應用程序正常工作,沒有安全連接(即ws:// xxx。 xxx.xxx.xxx:8443)。
我正在使用的協議是WebSocket。 我用過庫來連接。
Qt Creator 3.4.2(opensource)基於Qt 5.5.0(MSVC 2013,32位)
QsslSocket :: supportsSsl()返回false ,然后發現我缺少openssl庫文件( libeay32.dll,ssleay32.dll )然后我將這些文件放在我的應用程序的路徑中並再次運行代碼QSslSocket :: supportsSsl( )正在返回真實 。 但是,當我嘗試連接websocket時,它顯示出以下錯誤。
connect(&wsocket,SIGNAL(error(QAbstractSocket :: SocketError)),SLOT(onError(QAbstractSocket :: SocketError)),Qt :: DirectConnection); connect(&wsocket,SIGNAL(sslErrors(QList)),SLOT(onSslErrors(QList)),Qt :: DirectConnection);
onSslErrors:未知錯誤onError:“主機名與此證書的任何有效主機都不匹配”錯誤:QAbstractSocket :: SocketError(13)
來自客戶端的代碼片段(Qt)
void onConnectToServer()
{
qRegisterMetaType<QAbstractSocket::SocketError>();
qRegisterMetaType<QAbstractSocket::SocketState>();
connect(&wsocket, SIGNAL(error(QAbstractSocket::SocketError)), SLOT(onError(QAbstractSocket::SocketError)), Qt::DirectConnection);
connect(&wsocket, SIGNAL(sslErrors(QList<QSslError>)), SLOT(onSslErrors(QList<QSslError>)), Qt::DirectConnection);
connect(&wsocket, SIGNAL(connected()), SLOT(onConnected()), Qt::DirectConnection);
connect(&wsocket, SIGNAL(binaryMessageReceived(QByteArray)), SLOT(onBinaryMessage(QByteArray)), Qt::DirectConnection);
connect(&wsocket, SIGNAL(textMessageReceived(QString)), SLOT(onTextMessage(QString)), Qt::DirectConnection);
connect(&wsocket, SIGNAL(disconnected()), SLOT(onDisconnected()), Qt::DirectConnection);
connect(&wsocket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), SLOT(onStateChanged(QAbstractSocket::SocketState)), Qt::DirectConnection);
QUrl serverURL;
QWebSocket wsocket;
// some code for here and setting **serverURL**
wsocket.setPauseMode(QAbstractSocket::PauseNever);
wsocket.open(serverURL);
}
void onSslErrors(const QList<QSslError> &errors)
{
qDebug() << wsocket.errorString();
}
void onError(const QAbstractSocket::SocketError &socketError)
{
qDebug() << wsocket.errorString() << " Error:" << socketError;
}
void onConnected()
{
qDebug() << "Successfully Connected with " << serverURL;
}
void onDisconnected()
{
qDebug() << wsocket.errorString() << " CloseCode is >>> " << wsocket.closeCode();
}
void onStateChanged(QAbstractSocket::SocketState socketState)
{
qDebug() << "StateChanged : " << socketState;
}
如何解決這個問題,任何一個人都知道如何連接安全的Web套接字。 我確實檢查了SSL Echo客戶端示例,但似乎服務器端也應該是Qt WebSocket。
Q1)如何使用客戶端的Qt進行安全連接?
注意:服務器端已配置為已進行安全連接。
Q2)服務器端不是Qt代碼,客戶端是Qt。 它是否在安全的Web套接字連接中? (即服務器套接字和客戶端套接字是否獨立於編程語言以進行連接?)
注意:我可以使用無安全連接與同一服務器連接。
我畢竟找到了解決方案,
在使用此行打開與遠程服務器的連接之前,
wsocket.open(serverURL使用);
我添加了QSslConfiguration並忽略了用於開發的自簽名證書的ssl錯誤,當然我將在生產中更正。
QSslConfiguration sslConfiguration = wsocket.sslConfiguration();
sslConfiguration.setPeerVerifyMode(QSslSocket::VerifyPeer);
wsocket.setSslConfiguration(sslConfiguration);
wsocket.ignoreSslErrors();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.