Datenpakete variabler Länger über UDP verschicken



  • Hallo,

    ich verschicke derzeit mit den üblichen socket-Funktionen Datenpakete über UDP. Konkret gibt es ein struct, dass die Daten aufnimmt, das etwa so aussieht:

    typedef struct daten_t {
        uint32_t id;
        uint32_t message;
    } daten_t;
    

    Zum versenden verwende ich sendto, caste den pointer auf daten_t auf einen void* und verschicke sizeof(daten_t) Daten.

    Das gleiche mache ich auf Empfängerseite mit receive_from.

    Jetzt würde ich gerne mehrere Datenpakete in ein UDP-Paket zusammenfassen, aber immer unterschiedlich viele. Meine Idee ist eine Datenstruktur wie folgt:

    uint8_t anzahl_der_folgenden_pakete;
    daten_t pakete[anzahl_der_folgenden_pakete];
    uint8_t stop_byte;
    

    Ich würde dann anzahl*sizeof(daten_t) auszulesen versuchen.

    Wie kann ich das implementieren? Mit einer union? Wie geht das, wenn anzahl zur Laufzeit immer verschieden ist?

    Danke für guten Input!



  • ^^mach einfach ein festes array aus daten_t-structs, z.b. 180 (1440 bytes gehen noch durch UDP über ethernet, ohne dass ip-fragmentierung zuschlägt). dann füllste das array und verschickst soviel, wie drin ist. eine längenangabe brauchste nicht, weil man auf empfängerseite einfach paketlänge/sizeof(daten_t) rechnen kann, um an die anzahl der elemente zu kommen.
    🙂



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum ANSI C 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.


Anmelden zum Antworten