QLocalSocket -QlocalServer

Alles rund um die Programmierung mit Qt
Antworten
SaLu
Beiträge: 50
Registriert: 18. August 2008 18:06

QLocalSocket -QlocalServer

Beitrag von SaLu »

Hallo ich möchte eine interne Verbindung zwischen zwei prozessen machen. Dabei bin ich auf die oben genannten Klassen gestossen. Vielleicht hat sich jmd schon damit beschäftigt. Habe das Beispiel genommen und es umgekehrt dargestellt. Und zwar der Client stellt Daten auf den Server und der Server holt sie sich ab. Doch mein problem ist das der Server die Daten nicht bekommt. Der Client scheint es erfolgreich zu schreiben aber klappt nicht wie gewollt.

hier der Quellcode

Code: Alles auswählen

#include <QtNetwork>
#include "iostream.h"
#include "client.h"

 Client::Client()
 {
     socket = new QLocalSocket(this);
     connect(socket, SIGNAL(error(QLocalSocket::LocalSocketError)),
             this, SLOT(displayError(QLocalSocket::LocalSocketError)));

     requestNewFortune();
 }

 void Client::requestNewFortune()
 {
     blockSize = 0;
     socket->connectToServer("test");
     sendFortune();
 }

 void Client::sendFortune()
 {
     QByteArray block;
     QDataStream out(&block, QIODevice::WriteOnly);
     out.setVersion(QDataStream::Qt_4_0);
     out << (quint16)0;
     out << (QString)"hallo 1";
     out << (QString)"hallo 2";
     out << (QString)"hallo 3";
     out << (QString)"hallo 4";
     out << (QString)"hallo 5";
     out.device()->seek(0);
     out << (quint16)(block.size() - sizeof(quint16));

     qint64 fehler;
     fehler=socket->write(block);
     cout <<fehler<<endl;
     bool flush=socket->flush();
     cout <<flush<<endl;
 }
hier der Server

Code: Alles auswählen

#include <QtNetwork>
#include "server.h"
#include <stdlib.h>
#include <qlocalserver.h>
#include <qlocalsocket.h>
#include "iostream.h"


 Server::Server()
 {
     server = new QLocalServer(this);
     if (!server->listen("test"))
     {
        cout<<"Unable to start the server"<<endl;
         return;
     }
     cout <<"server is running"<<endl;
     connect(server,SIGNAL(newConnection()),this,SLOT(readFortune()));
 }

 void Server::readFortune()
 {
   bool pruefe=false;
   quint16 blockSize=0;
   while(!pruefe)
   {
     if(server->hasPendingConnections())
     {
       msleep(100);
       int i=server->serverError();
       cout <<i<<endl;
       QLocalSocket *clientConnection = server->nextPendingConnection();
       QDataStream in(clientConnection);
       in.setVersion(QDataStream::Qt_4_0);

       if (blockSize == 0)
       {
         while(clientConnection->bytesAvailable() < 1)
         {
           cout<<clientConnection->bytesAvailable()<<endl;
           msleep(500);
         }
         in >> blockSize;
       }
       QString nextFortune;
       while(!in.atEnd())
       {
         in >> nextFortune;
         cout <<nextFortune.toLocal8Bit().constData()<<endl;
       }
       pruefe=true;
     }
   }
 }
Antworten