Anzeige:
Ergebnis 1 bis 13 von 13

Thema: QSockets: Server und Client in einer Anwendung

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Registrierter Benutzer Avatar von Berufspenner
    Registriert seit
    30.03.2002
    Ort
    Hamburg
    Beiträge
    567
    Da die Nummer mit den QThreads auch noch ne Sache für sich ist, hab ich das jetzt erstmal ausgelassen. Ansonsten trenne ich ganz gerne die Aufgaben, weswegen mir Threads schon ganz gelegen kommen würden. Das ist auch der Grund, warum ich für eingehende und ausgehende Daten getrennte Sockets halten möchte.

    Nun habe ich das ganze mal umgesetzt und es scheint auch zu funktionieren. Zumindest kommen die Testnachrichten, die ich vom QT Client an das Board sende an und werden mir auch angezeigt. Umgekehrt gibt mir der Code, den ich für das Board geschrieben habe, keine Fehlermeldung aus, wenn es die Daten verschickt. Das heißt, eine Verbindung konnte hergestellt werden. Nur will ich eben die Daten auch auslesen können, die mir da geschickt werden, was aber gerade nicht funktioniert, weil trotz passendem connect() der zugehörige Slot nicht ausgeführt wird. Protokollmäßig ist das ganze textbasiert.
    Code:
    /* Server Connections */
    connect(server->socket_server, SIGNAL(newConnection()), this, SLOT(slotRead()));
    Wobei slotRead() so aussieht
    Code:
    void QtClientGui::slotRead()
    {
    	QMessageBox::information(this,tr("Alarm"),tr("slotRead()"));
    	QFile file("recv.txt");
    	QString lines;
    	file.open(QIODevice::Append | QIODevice::Text);
    	QTextStream incoming(&file);
    	while(server->socket_var->canReadLine())
    	{
    		lines.append(server->socket_var->readLine());
    		incoming << lines << endl;
    	}
    }
    Hat vielleicht jemand eine Ahnung? Wenn noch mehr Informationen/Code benötigt werden, reiche ich das natürlich nach. Danke schonmal.

    Kleine Anmerkung: Das ist alles noch Versuchscode, für Verbesserungsvorschläge bin ich natürlich offen, relevant ist für mich jetzt aber erstmal die Problemlösung.
    C und C++

  2. #2
    Registrierter Benutzer
    Registriert seit
    18.03.2005
    Beiträge
    211
    Das ist auch der Grund, warum ich für eingehende und ausgehende Daten getrennte Sockets halten möchte.
    Dafuer gibt es eigentlich gar keinen Grund :-) Du kannst das trotzdem sauber trennen !

    Aber ne Frage zu deiner Verbindung:
    DU hasst nu eine Verbindung Server->Client
    DU hasst ne zweite verbindung Client->Server
    Ich nehm an die IP's vom CLient und Server sind gleich ^^
    beide Verbindungen senden TCP
    Nutzen beide den selben Port ?

  3. #3
    Registrierter Benutzer Avatar von Berufspenner
    Registriert seit
    30.03.2002
    Ort
    Hamburg
    Beiträge
    567
    DU hasst nu eine Verbindung Server->Client
    DU hasst ne zweite verbindung Client->Server
    Genau
    Ich nehm an die IP's vom CLient und Server sind gleich ^^
    Wie kommst du darauf? Schließlich habe ich hier zwei getrennte Systeme.
    beide Verbindungen senden TCP
    Jupp
    Nutzen beide den selben Port ?
    Bis jetzt schon, wobei ich momentan wie gesagt noch in einer kompletten Überlegungsphase bin und ein Konzept aufbauen will.
    C und C++

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Du verwechselst den Server Socket mit einem Datensocket.

    Der ServerSocket wartet auf einem Port auf eingehende Verbindungen und sendet in solchen Fällen dann das newConnection() Signal.

    Im damit verbundenen Slot kann man dann die neue Datenverbindung mit nextPendingConnection() abholen und dann darüber bidirektional kommunizieren.

    Beim Einsatz von Threads ist darauf zu achten, das Socketobjekt der Datenverbindung entweder im Zielthread zu erzeugen (durch Überschreiben von QTcpServer::incomingConnection()) oder durch verschieben in den Zielthread, siehe QObject::moveToThread()

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer
    Registriert seit
    18.03.2005
    Beiträge
    211
    Ich nehm an die IP's vom CLient und Server sind gleich ^^
    Wie kommst du darauf? Schließlich habe ich hier zwei getrennte Systeme.
    Sorry, aehm unpraezise formuliert meinerseits.
    Ich meinte, du hasst ja immer ein Paar sockets auf beiden Seiten Client-Server verbindung laufen, Ich meint damit, Das die Sockets auf einer Maschine die selbe IP und selben Port benutzen.

    Du hasst also 2 TCP Verbindungen, die haargenau gleiche Endpunkte (IP:Port) verwenden.

    Iss aber eigentlich irrelevant, neuere Systeme sollten das alle koennen. bei ganz alten Impls des IP stacks gabs da mal Probleme ... sollt aber mittlerweile nicht mehr auftreten ...

    Denk auch, das es eher an der Eventloop liegt.

    Ciao ...

  6. #6
    Registrierter Benutzer Avatar von Berufspenner
    Registriert seit
    30.03.2002
    Ort
    Hamburg
    Beiträge
    567
    Zitat Zitat von RHBaum Beitrag anzeigen
    Du hasst also 2 TCP Verbindungen, die haargenau gleiche Endpunkte (IP:Port) verwenden.
    Zwangsläufig. Den "Serversocket" lasse ich halt auf alles hören, was da ist. Da beide Systeme aber je nur einen aktiven Ethernetanschluss und an diese nur eine IP gebunden ist, ist das nur eine Frage der Bequemlichkeit, um nicht jedes Mal die IP zu wechseln ;-) Auch die Ports sind die Gleichen.

    Grundsätzlich kann man das natürlich alles eleganter und schöner lösen, aber es geht ja hier erstmal grundsätzlich um Erfahrungsgewinnung.
    C und C++

Lesezeichen

Berechtigungen

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