Peer-to-Peer Datenübertragung oder andere Wege
-
Hallo liebe Forengemeinde,
ich möchte gerne ein Programm schreiben, dass dazu dient, Dateien von einem PC auf einen anderen zu transferieren. Ich hoffe damit, die maximale Up-und Downloadzeit meiner Verbindung ausnutzen zu können. (Falls ich damit falsch liege, bitte verbessern).
Nun suche ich den besten Weg dazu. Ich habe mir gedacht, dass eine P2P Verbindung hier am Besten wäre. Jetzt benötige ich ein optimales Protokoll dafür:
Das TCP ist zuverlässig und sicher. Daten werden hier als Paket versendet. Wie kriege ich raus, wie groß so ein Paket idealer Weise sein muss oder kann ich gleich die kompletten Daten auf einmal in ein Socket schreiben?
Oder ist das UDP besser, weil hier eine große Datenfluten gesendet werden und ich nur später kontrolliere, welche Pakete noch fehlen...
Eine weitere Idee wäre, meinen PC zu einem FTP Server zu machen und Daten von meinem PC über FTP downloaden zu lassen.
Vllt. habt ihr ja noch eine bessere Idee?Freue mich auf eure Antworten
-
FTP baut selber auf TCP auf. Und UDP ist erst interessant wenn du selber die flusskontrolle programmieren möchtest. Dazu gehört z.B. dass die gesendeten Datenpakete, wenn sie überhaupt ankommen, nicht in der selben Reihenfolge ankommen. Um einfach nur Dateien zu senden solltest du FTP verwenden.
P2P Netzwerke sind wieder etwas anderes. Dabei geht es ja ums Verteilen größerer Datenmängen zwischen vielen Knoten. Das macht dann eventuell Sinn wenn du wie bei den WOW updates immer sehr viele Knotem hast die auch online sind.
Aber bei z.B. zwei Computern eher nicht.Wenn du nur einfach Dateien von PC-A zu PC-B senden möchtest würden fertige Programme ausreichen die mit batch oder shell scritpen aufgerufen werden.
-
Das sind alles keine C++-Fragen. C++ kennt kein TCP oder UDP!
schrieb:
Ich habe mir gedacht, dass eine P2P Verbindung hier am Besten wäre.
Wie denn sonst?
Natürlich ist der direkte Weg am schnellsten.
schrieb:
Das TCP ist zuverlässig und sicher. Daten werden hier als Paket versendet. Wie kriege ich raus, wie groß so ein Paket idealer Weise sein muss oder kann ich gleich die kompletten Daten auf einmal in ein Socket schreiben?
TCP ist ein Stream. Also dahinter stecken schon Pakete. Aber das ist das Problem der Implementierung. Schreib also so viel du kannst in das Socket und die TCP-Implementierung kümmert sich um die Pakete.
schrieb:
Oder ist das UDP besser, weil hier eine große Datenfluten gesendet werden und ich nur später kontrolliere, welche Pakete noch fehlen...
Wenn du sichere Übertragung mit UDP haben willst. Dann musst du ja genau die Feature implementieren die TCP auch hat. Also baust du dir viel Overhead wieder ein. Vielleicht kannst du das ganze genauer kontrollieren oder die Flusskontrolle mit deiner Anwendungslogik verdrahten.
schrieb:
Eine weitere Idee wäre, meinen PC zu einem FTP Server zu machen und Daten von meinem PC über FTP downloaden zu lassen.
Warum "weitere Idee"? FTP ist ja ein Anwendungs-Protokoll. Also eine ganz andere Geschichte als UDP/TCP. Dazu hat FTP ziemlich viel overhead und ist nicht wirklich geeignet, wenn du möglichst hohe Übertragungsraten erreichen willst.
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ (auch C++0x) in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.