hallo,
ich möchte eine client - server verbindung in c++ mit qt4 erstellen. dabei soll der client sich zuerst mit einem passwort authentifizieren und danach daten vom server erhalten.
die server seite habe ich nach vorbild des threaded fortune servers aus dem qt tutorial erstellt:
Code:
...
void SslThread::run()
{
QTcpSocket tcpsocket;
QSslSocket serverSocket(&tcpsocket);
QByteArray pass("pass");
serverSocket.setLocalCertificate("server.cert.crt");
serverSocket.setPrivateKey("privkey.pem",QSsl::Rsa,QSsl::Pem,pass);
if(serverSocket.setSocketDescriptor(socketDescriptor))
{
connect(&serverSocket, SIGNAL(encrypted()), this, SLOT(ready()));
serverSocket.startServerEncryption();
}
else
{
emit error(serverSocket.error());
//delete serverSocket;
return;
}
while(serverSocket.waitForReadyRead())
{
qDebug() << serverSocket.readAll();
}
QString text = "NACHRICHT VOM SERVER";
serverSocket.write(toChar(text));
serverSocket.disconnectFromHost();
serverSocket.waitForDisconnected();
}
void SslThread::ready()
{
qDebug() << "Connection encrypted!";
}
char* SslThread::toChar(QString &string)
{
QByteArray ba = string.toLatin1();
char *c_str2 = ba.data();
return c_str2;
}
...
die client seite ist mittlerweile an den fortune blocking clienten, ebenfalls aus dem tutorial angelehnt. einfachere ausführungen ohne thread brachten ebenfalls wenig erfolg.
client:
Code:
...
void NetThread::run()
{
mutex.lock();
QString serverName = hostName;
quint16 serverPort = port;
mutex.unlock();
while (!quit)
{
const int Timeout = 5 * 1000;
QTcpSocket tcpsocket;
QSslSocket socket(&tcpsocket);
socket.connectToHostEncrypted(serverName, serverPort);
socket.ignoreSslErrors();
if(!socket.waitForEncrypted(Timeout))
{
emit error(socket.error(), socket.errorString());
return;
}
socket.write("passwort");
while(socket.waitForReadyRead())
qDebug() << socket.readAll().data();
QMutexLocker locker(&mutex);
cond.wait(&mutex);
serverName = hostName;
serverPort = port;
}
}
...
bisher funktionierte in anderen versionen nur entweder die übertragung des "passwortes" oder die der nachricht vom server. ein dialog zwischen beiden gelingt mir nicht. mit einer einfachen tcp verbindung, die ganz ähnlich aufgebaut ist funktioniert es genausowenig.
nachdem ich jetzt etliche stunden an dem problem sitze, ist es mir erstmal fast egal ob ich das ganze mit qsslsocket oder qtcpsocket zustande bekomme.
vielleicht kann mir jemand weiter helfen.
ups
Lesezeichen