Du benötigst bei Qt beides, also Server und Klient.
Der Server wird an deinen Port gebunden und sendet via Signal an den Socket Klient in dem Fall ein QTextEdit etc.
Sehe dir bei den examples die fortuneclient und fortuneserver Beispiele an.
Du benötigst bei Qt beides, also Server und Klient.
Der Server wird an deinen Port gebunden und sendet via Signal an den Socket Klient in dem Fall ein QTextEdit etc.
Sehe dir bei den examples die fortuneclient und fortuneserver Beispiele an.
mfg undefined
--
Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
xhtml Debugger
Danke für deine Antwort, aber ich glaub, dass du mich da ein bisschen missverstanden hast ;-) Dass ich beides brauche, ist mir bewusst. Es geht jetzt nur darum, wie ich das am sinnvollsten implementieren kann? Muss/kann ich für beide Sockets einen eigenen Thread erstellen oder erlaubt das ereignisgesteuerte Verhalten der QSockets Server- und Client-Code direkt in einem Thread/Prozess laufen zu lassen?
C und C++
Du kannst beliebige viele Sockets pro Eventloop benutzen, die Frage ist mehr wie lange die jeweiligen Verarbeitungsschritte brauchen und ob das eventuell mit extern benötigtem Timing interferiert.
Wenn du nicht auf die selben Slots verbindest, sind die Sockets eoweit unabhängig wie du möchtest, d.h. du kannst natürlich leicht auf gemeinsame Daten zugreifen.
Ciao,
_
Qt/KDE Entwickler
Debian Benutzer
Ok, heißt also im Umkehrschluss, dass ich einen Client und einen Server Socket gleichzeitig in einem Thread laufen lassen kann. Was aber, wenn beide Sockets gleichzeitig arbeiten sollen, also der eine gerade Daten empfängt wenn der andere Daten senden soll? Werden eingehende Daten automatisch gepuffert, bis alle Daten gesendet wurden?
C und C++
Ja genau.
Wenn einer der Sockets signallisiert, dass er jetzt bereit für lesen/schreiben ist, wird der entsprechende Qt Code ausgeführt.
Ciao,
_
Qt/KDE Entwickler
Debian Benutzer
Aehm ...
IMHO sind Sockets bidirektional !
Das heisst pro "verbindung" brauchst du nur ein Socket-Paar, also 1 ServerSocket und ein Clientsocket.
DU kannst also ueber das Clientsocket senden und empfangen, das sogar gleichzeitig (in unterschiedlichen threads). Ob die QTSockets threadsicher sind, muesst ich aber auch erst nachlesen ....
Ciao ...
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.Wobei slotRead() so aussiehtCode:/* Server Connections */ connect(server->socket_server, SIGNAL(newConnection()), this, SLOT(slotRead()));
Hat vielleicht jemand eine Ahnung? Wenn noch mehr Informationen/Code benötigt werden, reiche ich das natürlich nach. Danke schonmal.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; } }
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++
Lesezeichen