2016-08-20 6 views
0

So arbeite ich mit einer Kamera, die über ein Ethernet-Kabel mit dem Computer verbunden ist und anscheinend als tcp/ip stream-Socket zugegriffen werden muss.Wie kann sichergestellt werden, dass die neuesten Daten von einem TCP/IP-Socket abgerufen werden?

Grundsätzlich möchte ich so etwas wie eine Aufnahme alle 1 Sekunde machen. Ich bemerkte jedoch, dass die Eingabedaten von der Kamera immer wieder hereinkamen, während ich nur die neuesten Daten von der Kamera holen wollte und nichts anderes, d. H. Nur das aktuellste Bild zu dieser Zeit.

Was ich bisher gelesen habe, ist, dass ich die Eingabedaten mehrmals lesen muss, bis ich die 'aktuellsten Daten' erreiche. Ist das wirklich der einzige Weg dies zu tun? Ich mag es wirklich nicht, dass ein Prozess die ganze Zeit beschäftigt ist, nur um die eingehenden Daten aus dem Stream-Socket zu "werfen".

Kann ich theoretisch nicht die Eingangspuffergröße für die Eingabe vom Socket verringern, so dass ich nur ein Bild mit Daten empfangen kann? Und dann wären alle weiteren eingehenden Daten einfach verschwendet. Wenn der Eingabepuffer einmal geleert wird, wird er mit den neuesten Daten oder etwas ähnlichem gefüllt. (Ich meine, es muss eine Grenze geben, wie viele Eingangsdaten aus dem Stream sich anhäufen können, wenn sie darauf warten, verarbeitet/gelesen zu werden, richtig? Was passiert, wenn dieses Limit erreicht wird? Werden die weiteren Daten weggeworfen oder ist das? 'Puffer' mit den neuen Daten überschrieben?)

Ist das überhaupt möglich? Ich bin ein absoluter Anfänger, also theoretisiere ich nur. Wenn so etwas möglich ist, kann irgendjemand die Umrisse zeigen, wie man das programmiert? (Ich muss die Boost Asio-Bibliothek auf Ubuntu für dieses Zeug verwenden) Das wäre sehr hilfreich!

Antwort

1

Ja, es ist der einzige Weg, es zu tun.

Der ganze Grund für die Verwendung von TCP ist, dass es ein "zuverlässiges" Protokoll mit garantierter Lieferung ist. Im Gegensatz zu UDP.

Die Aufgabe von TCP besteht darin, die Daten in der Reihenfolge, in der sie gesendet wurden, an den Empfänger zu liefern, ohne etwas zu verlieren. Wenn die Daten nicht zugestellt werden können, wird die Verbindung irgendwann unterbrochen, wenn TCP aufgibt. Solange jedoch eine aktive Verbindung besteht, erhält der Empfänger alles, was der Sender sendet.

Wenn Sie keine Daten erhalten möchten, die der Absender erhält, müssen Sie die entsprechenden Vereinbarungen mit dem Absender treffen, damit dies geschieht. TCP wird keine Daten verwerfen, nur weil der Empfänger es nicht will.

+0

Hm, ok. Ist es dann möglich, dieses UDP-Protokoll für eine Ethernet-Verbindung zu verwenden? So etwas wie UDP/IP? (Ich weiß nur, dass das Kamera-Gerät eine feste IP hat und damit verbunden werden muss) – kushy

+2

Sie müssen das technische Referenzhandbuch der Kamera konsultieren. Wenn die Kamera einen UDP-Stream unterstützt, brauchst du meine Erlaubnis nicht, sie zu benutzen. –

+0

Ich habe es im Handbuch nachgeschlagen und es listet nur 'tcp/ip stream' in der Liste der möglichen Protokolle auf :-(Ich denke, dann muss ich einen zusätzlichen Thread einrichten, um die eingehenden Daten einzufangen und wegzuwerfen Ich kann mir nicht helfen, denke ich. Wie auch immer, danke für Ihre Hilfe! – kushy

Verwandte Themen