QT Netzwerkprotokoll
QT Netzwerkprotokoll
Hallo, ich habe vor mir ein Netzwerkprotokoll zu bauen mit QT. Dabei soll die Teilnehmer Statusdaten austauschen können (Strings) aber auch größere Daten übertragen werden (Bitmaps).
Die Datenübertragung im Einzelnen ist nicht das Problem, aber mir fehlt im Moment eine Idee wie ich herrausfinden kann was da gerade für Daten ankommen.
Hat da vielleicht jemand einen Tipp für mich.
Die Datenübertragung im Einzelnen ist nicht das Problem, aber mir fehlt im Moment eine Idee wie ich herrausfinden kann was da gerade für Daten ankommen.
Hat da vielleicht jemand einen Tipp für mich.
-
androphinx
- Beiträge: 170
- Registriert: 26. Januar 2009 09:19
- Wohnort: 127.0.0.2
Also mit den paar Daten den du mir dazu gegeben hast, kann ich nur das blaue vom Himmel raten.
Also ich mache das eigentlich immer über eine ID die ich entweder mit ins Packet packe oder extra vorher sende.
Du solltest aber erstmal langsam anfangen und erstmal damit anfangen, dass sich jeder normal Nachrichten senden kann.
Mfg androphinx
Also ich mache das eigentlich immer über eine ID die ich entweder mit ins Packet packe oder extra vorher sende.
Du solltest aber erstmal langsam anfangen und erstmal damit anfangen, dass sich jeder normal Nachrichten senden kann.
Mfg androphinx
Hey...
Schau Dir doch mal das Chat-Beispielprogramm von Qt an. So bin ich auch mit der Netzwerkprogrammierung gestartet, um dann langsam immer komplexer zu werden.
http://doc.trolltech.com/4.4/network-network-chat.html
Schau Dir doch mal das Chat-Beispielprogramm von Qt an. So bin ich auch mit der Netzwerkprogrammierung gestartet, um dann langsam immer komplexer zu werden.
http://doc.trolltech.com/4.4/network-network-chat.html
Ja die ganzen randbedingungen fehlen !
wie sicher / robust muss dein protokoll sein
wie schauts mit der performance aus, was fuer einen "verlust"(protokolloverhead) oder besser was fuer eine nutzdatenrate kannst du dir leisten ?
WIe gestaltet sich der datenaustausch insgesamt, hasst du nur kurzzeitige uebertragungen von paar wenigen Kbytes, und kannst schon die "pausen" zum synchronisieren nehmen, oder hasst du einen grossen fetten Datenstrom im vollast ueber laengere zeit ???
wie sind die daten aufgebaut ... richtig schoen willkuerlich, oder immer viele gleichartige bloecke (datenstrukturen) hintereinander ...
Fuern einstieg empfehl ich als erstes immer XML zu streamen, iss zwar graessliche performance, aber "relativ" leicht zu implementieren und eigentlich sehr robust ...
Ciao ...
wie sicher / robust muss dein protokoll sein
wie schauts mit der performance aus, was fuer einen "verlust"(protokolloverhead) oder besser was fuer eine nutzdatenrate kannst du dir leisten ?
WIe gestaltet sich der datenaustausch insgesamt, hasst du nur kurzzeitige uebertragungen von paar wenigen Kbytes, und kannst schon die "pausen" zum synchronisieren nehmen, oder hasst du einen grossen fetten Datenstrom im vollast ueber laengere zeit ???
wie sind die daten aufgebaut ... richtig schoen willkuerlich, oder immer viele gleichartige bloecke (datenstrukturen) hintereinander ...
Fuern einstieg empfehl ich als erstes immer XML zu streamen, iss zwar graessliche performance, aber "relativ" leicht zu implementieren und eigentlich sehr robust ...
Ciao ...
Ich glaub du gehst mir da ein bißchen zu weit RHBaum, ich bekomme das mit der Datenübertragung schon hin und Performancesachen sind im Moment erstmal nicht so sehr wichtig. Es geht mir im Moment wirklich einfach nur darum was ich mit den Daten mache wenn sie da sind.
@Markus das QT Chat Beispiel hab ich mir schonmal angesehen aber das hilft mir bei meiner Frage nicht so wirklich weiter.
Um nochmal genauer zu beschreiben was ich vor habe. Ich habe Clients die Webcams angeschlossen haben und die sollen die Bilder übertragen aber eben auch Statusinformationen, wie z.B. ist die Kamera an...
Und da fehlt mir eben die Idee wie ich die verschiedenen Daten die da ankommen unterscheide.
@Markus das QT Chat Beispiel hab ich mir schonmal angesehen aber das hilft mir bei meiner Frage nicht so wirklich weiter.
Um nochmal genauer zu beschreiben was ich vor habe. Ich habe Clients die Webcams angeschlossen haben und die sollen die Bilder übertragen aber eben auch Statusinformationen, wie z.B. ist die Kamera an...
Und da fehlt mir eben die Idee wie ich die verschiedenen Daten die da ankommen unterscheide.
-
androphinx
- Beiträge: 170
- Registriert: 26. Januar 2009 09:19
- Wohnort: 127.0.0.2
jetzt kommen wir der sache ja schon langsam näher....
grundsätzlich kannst du zum beispiel zwei getrennte protokolle machen, die an zwei unterschiedlichen ports liegen. an einem der bildstrom und an dem anderen der statusbericht und mglw. steuerkommandos.
die schönere variante ist aber ein protokoll. du könntest zum beispiel immer das erste byte für etwas festlegen. Bsp:
die nächsten bytes im packet sind dann einfach die entsprechenden daten.
Mfg androphinx
grundsätzlich kannst du zum beispiel zwei getrennte protokolle machen, die an zwei unterschiedlichen ports liegen. an einem der bildstrom und an dem anderen der statusbericht und mglw. steuerkommandos.
die schönere variante ist aber ein protokoll. du könntest zum beispiel immer das erste byte für etwas festlegen. Bsp:
Code: Alles auswählen
1 = Neues Bild
2 = Verbindung zur Kamera getrennt
3 = Statusbericht
Mfg androphinx
Schau dir an, wie andere Protokolle das machen ....
HTML ist zum beispiel ein halb textuelles halb binaeres protokoll ...
es werden anfragen mit bestimmten keywortern geschickt
(Get Post ... ) und zurueck kommen packete wo zuerst ein header kommt (wird mit textuellen mitteln geparst) in dem die groesse der typ usw. drinnestehen, und danach nen Binaerer block mit der angegebenen groesse ... der binaer als datei oder eben gleich al htmlblock gehandhabt wird ...
das geht auch nur in eine richtung ....
also sowas:
<Picture Format=jpg size=123456>
Danach auch das zeilenende triggern, und dann die naechsten "size" Anzahl zeichen als binaeren block puffern und an den viewer als bild geben, danach wieder im textmode die Befehle parsen ....
BTW.
webkamas bieten meist doch schon nen datenstrom an, denn nur noch uebers netzwerk umleiten musst ... und das sogar schon als standardisiertes protokoll .. (mpeg, avi) ....
Da boete sich dann die version mit den 2 ports an ....
oder willst wirklich nur einzelne bilder schicken ???
Ciao ...
HTML ist zum beispiel ein halb textuelles halb binaeres protokoll ...
es werden anfragen mit bestimmten keywortern geschickt
(Get Post ... ) und zurueck kommen packete wo zuerst ein header kommt (wird mit textuellen mitteln geparst) in dem die groesse der typ usw. drinnestehen, und danach nen Binaerer block mit der angegebenen groesse ... der binaer als datei oder eben gleich al htmlblock gehandhabt wird ...
das geht auch nur in eine richtung ....
also sowas:
<Picture Format=jpg size=123456>
Danach auch das zeilenende triggern, und dann die naechsten "size" Anzahl zeichen als binaeren block puffern und an den viewer als bild geben, danach wieder im textmode die Befehle parsen ....
BTW.
webkamas bieten meist doch schon nen datenstrom an, denn nur noch uebers netzwerk umleiten musst ... und das sogar schon als standardisiertes protokoll .. (mpeg, avi) ....
Da boete sich dann die version mit den 2 ports an ....
oder willst wirklich nur einzelne bilder schicken ???
Ciao ...
Eigentlich wurde die Frage schon beantwortet. Du kannst die Datenströme nur unterscheiden, indem du dir den Inhalt anschaust. Es fliegt ja kein Geist parallel mit. Mindestens der erste Teil des Stromes muss also ein spezielles Format besitzen, welches aussagt was los ist, alles weitere wird inkrementell von den vorherigen Daten abgeleitet.
Das Protokoll, das du meinst, heißt http nicht html. 
Aber Neo sagte ja, er plädiere nun für getrennte Datenströme über ein Videoformat. Aber da brauchst du dann natürlich einen Decoder für (ob das Phonon unterstützt??) und vorallem Informationen über die Webcam. Eventuell hilft dir ein Blick in den Quellcode von Kopete weiter, wenn du etwas konkretes über Webcams mit Qt wissen möchtest.
Ich habe davon keine Ahnung.
Viele liebe Grüße
The User
Aber Neo sagte ja, er plädiere nun für getrennte Datenströme über ein Videoformat. Aber da brauchst du dann natürlich einen Decoder für (ob das Phonon unterstützt??) und vorallem Informationen über die Webcam. Eventuell hilft dir ein Blick in den Quellcode von Kopete weiter, wenn du etwas konkretes über Webcams mit Qt wissen möchtest.
Ich habe davon keine Ahnung.
Viele liebe Grüße
The User
Was ist dann das Problem?Die Datenübertragung im Einzelnen ist nicht das Problem
Du musst immer VORHER wissen, was für Daten als NÄCHSTES kommen. Beispielsweise weißt du, dass als erstes eine Informationsstruktur (oder die erwähnte ID) kommt. Da drin steht, was als nächstes kommen wird. Anschließend könnte man wieder dieselbe Informationsstruktur erwarten.Datenaustausch bekomme ich hin wenn ich weiß was da für Daten ankommen.
Sieh dir auch mal QDataStream an. Man sollte keine systemspezifischen Daten übertragen (wie z.B. ein int).
Um das mal zu konkretisieren, ich kann momentan Bilder übertragen (Client zum Server) und ich kann auch Befehle übertragen (Server zum Client). Das funktioniert also ohne Probleme. Wenn ich jetzt aber auch Befehle vom Client zum Server übertragen will weiß ich nicht wie ich die beiden Datentypen, z.B. IMG und String, beim Bearbeiten des eingegangenen Streams umgehen bzw. diese unterscheiden soll.Zitat:
Die Datenübertragung im Einzelnen ist nicht das Problem
Was ist dann das Problem?
Und zum dem anderen Punkt nochmal ganz konkret, ich weiß nicht wie ich das programmiertechnisch umsetzten soll was du da beschrieben hast. Theoretisch verstehe ich es aber praktisch umsetzten kann ich es eben nicht und genau da liegt eigentlich von Anfang an mein Problem.