Anzeige:
Ergebnis 1 bis 2 von 2

Thema: client - server mit qt4

  1. #1
    ups
    Gast

    client - server mit qt4

    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

  2. #2
    ups
    Gast
    wie so ziemlich oft, findet man kurz nachdem man fragt die antwort selbst :-)

    in der run() methode des servers muss eine endlosschleife (while(true)) eingebaut werden. ansonsten endet sie, bevor die daten gelesen worden sind.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •