UDP belibig lange Nachricht senden



  • Hallo Zusammen,
    Angenommen ich habe eine Nachricht LOGIN.
    Diese setzt sich zusammen aus:
    - ID (1 Byte)
    - Username (beliebig viele Byte)
    - Chatraum (beliebig viele Byte)

    Diese Nachricht will ich per sendto (UDP) an einen Server schicken.
    Wie stell ich das an?

    Ich weiß wies funktioniert wenn ich folgendes versende:

    char msg[64] = "hallo Welt"
    

    Dies zu versenden ist kein Problem. Nur LOGIN kann ja beliebig lang sein.
    Und wie geh ich mit LOGIN auf der Serverseite um?

    Liebe Grüße



  • - ID (1 Byte)
    - Usernamenlänge (4 Byte)
    - Username (beliebig viele Byte)
    - Textlänge (16 Byte)
    - Chatraum (beliebig viele Byte)



  • @Textlänge: Übertreib mal nicht. 1 Byte für die Länge des Usernamens und 2 Byte für die Länge der Nachricht reicht i.d.R. vollkommen aus.



  • 314159265358979 schrieb:

    @Textlänge: Übertreib mal nicht. 1 Byte für die Länge des Usernamens und 2 Byte für die Länge der Nachricht reicht i.d.R. vollkommen aus.

    Ich wollte nur ein "Der Text der versendet werden kann ist ja nicht beliebig lang" als Antwort von uni_cu vermeiden.



  • Hallo,

    mir kommt es nicht auf das Format der nachricht an, sondern wie ich diese umsetze und verschicke.

    Gehen wir von meinem Format aus.

    id = 1 (unsigned int)
    username = "willi" (unsigned char*)
    chatraum = "sportchat" (unsigned char*)

    Ich habe mir irgendwie folgendes gedacht:

    void *LOGIN;
    uint8_t id; 
    id = 1;
    unsigned char* username = "willi";
    unsigned char* chatraum = "sportchat";
    
    LOGIN = malloc(1+strlen(username)+strlen(chatraum));
    *(uint8_t*)LOGIN = id;
    (uint8_t*)LOGIN++;
    *(char*)LOGIN = username;
    (char*)LOGIN += strlen(username);
    *(char*)LOGIN = chatraum;
    .
    .
    .
    err = sendto(socket_fd,(char*)LOGIN, 1+strlen(username)+strlen(chatraum), 0,
    		(struct sockaddr*) &dest, sizeof(struct sockaddr_in));
    

    Ich hoffe ihr versteht jetzt wo mein Problem ist.

    LG


Anmelden zum Antworten