2013-01-06 45 views
2

我試圖使用Qt文檔中的示例代碼實現SSL服務器。調用QSslSocket :: startServerEncryption,但沒有任何反應

但是在serverSocket->startServerEncryption();被調用後,沒有任何反應 - encrypted()sslErrors()信號都沒有發射(我在與它們連接的插槽中放置了斷點)。

我通過使用connectToHostEncrypted連接到我正在監聽的端口來連接QSslSocket來測試它。套接字發送數據,但我的服務器沒有響應(我正在使用TCP嗅探器/代理來查看從客戶端發送到服務器以及從服務器發送到客戶端的所有數據)。

這是我的服務器代碼:

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; 
    } 
} 

這就是我如何連接到它:

server = new SslServer(this); 
server->listen(QHostAddress::Any, 3333); 
QSslSocket *socket = new QSslSocket(this); 
socket->connectToHostEncrypted("127.0.0.1", 3333); 

回答

2

按照documentation

兩個鍵和本地證書,如果你正在創建SSL服務器套接字是必需的。

如果你不提供它們,套接字發出一個「常規」error(QAbstractSocket::SocketError)信號。正如你發現的那樣,服務器在這種情況下不會發送任何數據。

+0

謝謝,我以爲連接'sslErrors'就夠了。我連接了'error'信號,並且它與'QAbstractSocket :: UnknownSocketError'錯誤一起發出。 – sashoalm

+0

我發現更多關於錯誤,使用QSslSocket :: errorString。我現在編輯了我的問題。 – sashoalm

0

SSH是不是SSL。 SSH客戶端等待來自服務器的初始數據,而SSL客戶端首先發送數據。所以他們都在等待對方的數據。

+0

謝謝你指出。我編輯了我的問題,現在我正在用'QSslSocket :: connectToHostEncrypted'進行測試,但問題仍然存在。此外,現在我確定客戶端確實發送數據,因爲我正在記錄來自TCP連接的所有數據。 – sashoalm

相關問題