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!
Senden und Empfangen von Daten
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.
Re: Senden und Empfangen von Daten
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).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!
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ß
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