Senden und Empfangen von Daten

Alles rund um die Programmierung mit Qt
Antworten
maria
Beiträge: 4
Registriert: 27. November 2010 23:36

Senden und Empfangen von Daten

Beitrag von maria »

Hallo meine Lieben,

es geht darum, dass ich ein und dasselbe Programm auf zwei verschiedenen Computern laufen lassen möchte. Nun will ich eine bidirektionale Kommunikation zwischen den beiden Computern haben. ich möchte Daten Senden und Empfangen. Das Senden und Empfangen soll im Programm in non-gui Threads untergebracht sein.Ich habe von unterschiedlichen Methoden gelesen wie qTcpSocket- und Server, qUdpSocket, qFtp und QNetworkAccessManager. Wollte nun mal eure Meinungen erfahren, was ihr denkt was vielleicht eine gute und einfache Lösung wäre, um Daten auszutauschen? Wäre sehr dankbar für Beiträge!
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Du solltest dich erst mal informieren, was der Unterschied zwischen TCP, UDP und FTP ist. Ich denke, dann können wir weiterreden...
maria
Beiträge: 4
Registriert: 27. November 2010 23:36

Beitrag von maria »

Soweit ich weiß regelt TCP, wie Daten zwischen zwei Rechnern ausgetauscht werden sollen, und ist ein Verbindungsorientiertes Protokoll, wogegen UDP ein verbindungsloses Protokoll ist. Beide arbeiten auf Schicht 4. FTP liegt eine Ebene höher, also in der Anwendungsschicht. FTP überträgt Daten zwischen zwei Endgeräten über TCP oder UDP. Eigentlich wäre es ja dann einfacher, wenn ich alles über die Klasse QFTP mache oder, der baut ja auf Schicht 4 auf. Aber ich würde halt gerne mal die Vor- und Nachteile davon wissen. Vielleicht gibt es mit der einen oder anderen Klasse ja mehr Schwierigkeiten...weiß halt echt nicht, mit welcher Klasse ich das ganze umsetzen sollte.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Bitte nicht "soviel ich weiß". Lies doch nochmal. Dann weißt du schon dass ftp nix ist.
Wg. UDP und TCP sollte der Wikipedia-Artikel ausreichend sein, damit du weißt welches für dich geeignet ist.
nexus
Beiträge: 75
Registriert: 14. Oktober 2006 19:24

Beitrag von nexus »

Da du eine bidirektionale Verbindung von Host zu Host haben willst ist TCP das richtige.
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Re: Senden und Empfangen von Daten

Beitrag von pfid »

maria hat geschrieben:Hallo meine Lieben,

es geht darum, dass ich ein und dasselbe Programm auf zwei verschiedenen Computern laufen lassen möchte. Nun will ich eine bidirektionale Kommunikation zwischen den beiden Computern haben. ich möchte Daten Senden und Empfangen. Das Senden und Empfangen soll im Programm in non-gui Threads untergebracht sein.Ich habe von unterschiedlichen Methoden gelesen wie qTcpSocket- und Server, qUdpSocket, qFtp und QNetworkAccessManager. Wollte nun mal eure Meinungen erfahren, was ihr denkt was vielleicht eine gute und einfache Lösung wäre, um Daten auszutauschen? Wäre sehr dankbar für Beiträge!
Bevor du die Sachen unnötig verkomplizierst: Die meisten Teile der Netzwerk-API von Qt arbeiten bereits asynchron, so dass ein extra Thread unter Umständen nicht benötigt wird (kommt natürlich auf deinen Anwendungsfall an, den ich nicht kenne).
nhs
Beiträge: 6
Registriert: 27. Februar 2011 20:49
Wohnort: Hessen
Kontaktdaten:

Beitrag von nhs »

Wenn du noch keine Erfahrung mit Multithreading hast, dann würde ich die Idee mit NonGui Thread vorerst lassen. Die Socket Klassen arbeiten ohnehin im Asychmodus. Für eine sichere Kommunikation würde ich QTcpServer und QTcpSocket nehmen. Du muss zuerst entscheiden, welche Instanz von deinem Program als Server arbeiten soll. Server ist der, der den Listener an bestimmten port auf ankommende Connection horscht.
Wenn es sich um das gleiche Programm handelt, dann soll der zuerst gestartete Process den Listener anbieten. Die Verbindung wird vom später gestarteten Process per QAbstractSocket::connectToHost(...) getriggert. Wenn die Verbindung steht, dann musst Du nur noch dein Kommunikationprotokoll befolgen. Alles ziemlich einfach mit Qt.... :)

Gruß
Recht haben bedeutet nicht, auch Recht zu bekommen
Antworten