Boost: TCP Verbindungsstatus?
-
Hallo,
da mich mal wieder tiefgründige Langeweile + Faulheit quält, hätte ich da mal eine Frage. Und zwar handelt sich folgendes um Boost.Asio (TCP):
-Wie und kann man bei einer bestehenden Verbindung zwischen Client und Server festellen, welche Verbindungsrate man gerade hat?
-Wenn der Client beispielsweise ein 10MB großes Paket verschickt, wie kann man festellen, wann das Paket auch wirklich angekommen ist? Also eine Art "Ladeleiste" die den Fortschritt der Übertragung der Datei darstellt?Die einzige Lösung in meiner Sicht wäre:
- Client verschickt ID-Paket, in dem steht wie groß die nachfolgende Datei ist
- Client verschickt Datei
- Server berechnet Größe jedes einzeln angekommenen Paketes
- Server schickt Größe des angekommenen Paketes zum Client
- Client: Ausgabe: "xyz Byte von xyz Dateigröße erhalten"
?!
Danke im Voraus!
-
Hi,
Wenn der Server die Groesse schon vor dem abschicken kennt kann er das vorher als "Headers" schicken (Siehe HTTP Protocol - Content-Size )
Wenn nicht ist das ganze schwierieger, aber gibts bei HTTP z.B. Transfer-Encoding chunked (http://en.wikipedia.org/wiki/Chunked_transfer_encoding)
Um die Reihenfolge musst du dir weniger gedanken machen, du bekommst die Pakete erst wenn die in der richtigen Reihenfolge angekommen sind.
Um die Geschwindigkeit zu ermitteln musst du Client Seitig halt die zeit spanne messen in der du Uebertraegst und mit der Groesse der erhaltenen Daten die Verbindungsgeschwindigkeit ermitteln.
Asio ist tut das fuer dich nicht, das musst du dann schon selbst implementieren.
Wenn du dem Server mitteilen willst das du die Uebertragenen Daten erhalten hast, musst du dem Server halt eine Art ACK message schicken.
Regards,
Edit: // Link clickable