Dies ist eher eine Anfrage zur Bestätigung als eine Frage, so werde ich es kurz halten. (Ich bin von meinem PC weg und kann diese Lösung nicht einfach zum Test implementieren).C++ Socket Buffer Größe
Ich schreibe ein Programm, um eine Bilddatei von einer HimbeerPi an meinen PC zu senden, die per Webcam (zusammen mit Metadaten) aufgenommen wurde.
Ich habe herausgefunden, dass das Bild etwa 130kb ist, der Paketkopf ist 12b und die zugehörigen Metadaten ein weiterer 24b. Obwohl ich die Bildgröße in Zukunft vergrößern kann, sobald ich einen funktionierenden Prototyp habe.
Im Moment bin ich nicht in der Lage, dieses ganze Paket erfolgreich wiederherzustellen, da ich nach dem Senden an den PC immer nur ca. 64kb im Puffer erhalten habe.
Ich habe angenommen, dass dies für eine Buchse die Standardpuffergröße wie erklärt, weil aus irgendeinem Grund ist:
SOCKET sock = socket(PF_INET, SOCK_STREAM, 0);
ist 64kb (bitte jemand dies klären könnte, wenn Sie ‚in der wissen‘ sind)
Also - um dieses Problem zu beheben, beabsichtige ich, die Socketgröße auf 1024kb über den Befehl setsockopt (x ..) zu erhöhen.
Bitte könnte jemand bestätigen, dass meine Diagnose des Problems und die vorgeschlagene Lösung korrekt sind?
Ich stelle diese Frage, da ich gerade von meinem PC weg bin und ich kann es nicht versuchen, bis ich wieder nach Hause komme.
Die andere Alternative, für die ich mich geistig vorbereite, besteht darin, das Paket manuell zu segmentieren. Dies würde jedoch, wie ich vermute, viel mehr Fehlerpotential mit sich bringen und die Gesamtpaketgröße/Rechenzeit erhöhen, da ich für jedes einzelne Segment eine Kopfzeile senden und lesen müsste. –
Es ist London zu einem Ziegel, dass der Grund, warum Sie nicht alle Daten erhalten, ist, dass Sie annehmen, dass 'recv()' Ihren Puffer füllt, anstatt zu loopen. Es gibt nichts in der Dokumentation, das diese Annahme stützt. – EJP
Danke für die Antwort, nicht 100% sicher, dass ich dir folgen, aber um zu verdeutlichen: Ich kenne die Größe der eingehenden Daten, weil es in der Kopfzeile gespeichert ist und diese extrahiert, gelesen wird, und einen Puffer geeigneter Größe zugeordnet, um den Rest von zu empfangen die Daten. Also, in einem weiteren Erklärung: > Header holen mit Datenpaketgröße > Erstellen Puffer der richtigen Größe > Ausführen recv die Puffer und notieren Sie Bytes empfangen zu füllen> Überprüfen empfangenen Bytes gegen Datengröße in Kopf –