Struktur über Winsock versenden



  • @ MisterX: es kommt zwar was an auf der anderen Seite. Aber damit kann sie nix anfangen. Ich werde es mal auf deine Weise probieren. Danke



  • das geht natürlich, du machst offensichtlich was falsch und mit padding ist gemeint padding durch den compiler zu unterbinden bei strukturen die man übers netzwerk schickt 👎



  • @asdca: Ok diese Antwort ist ja tatsächlich hilfreich. Sorry dass ich mich im anderen Thread so aufgeregt habe aber du musst selbst zu geben dass deine Antwort eher so Klang wie "Igiit DirectX nimm lieber was anderes sonst helf ich dir nicht". Sorry auch dass ich etwas ausfallender geworden bin. Aber so was kotzt mich manchmal echt an in Foren, denn zur Hilfestellung sind Sie schließlich da. Klar wenn jemand fertigen Code will hat er keine Hilfe verdient und soll mal schön googeln, dass seh ich genauso aber gerade mit den libs einbinden sind nun mal typische Anfängerfehler und wenn du dass nicht weißt wonach willste suchen? Höchstens nach der Fehlermeldung so hab ich es früher immer gemacht. Aber eagl, dass gehört nicht hierhin.

    Allerdings danke schön nochmal für den Hinweis ich vergesse jedesmal den Sch... im VS umzustellen. Können die das nicht defaultmäßig korrekt einstellen:).

    Ciao

    Crazy



  • Hi,
    kann mir jemand die Bedeutung des mit : getrennten Wertes in der Struktur genauer erklären? Ich finde nichts darüber beim googlen was diese Werte bezwecken.



  • mr. main schrieb:

    Hi,
    kann mir jemand die Bedeutung des mit : getrennten Wertes in der Struktur genauer erklären? Ich finde nichts darüber beim googlen was diese Werte bezwecken.

    was is los?

    und du stellst das natürlich nicht in den projekt einstellungen ein sonst gilt es logischerweise für alle strukturen. schonmal was von pragma pack gehört?



  • asdca schrieb:

    was is los?

    na z.B. diese Deklaration innerhalb der Struktur(unsigned int version:2 ). Sorry bin noch Anfänger und dabei dies alles zu lernen.



  • Doch ich kenn pragma.
    Aber ist eh eine vorgegebene Einstellung hier in der Firma, dass die Compiler Option auf Zp1 eingestellt wird.

    Aber ich habe es auch vorher mit

    #pragma pack(push, 1)
    ...
    struktur
    ...
    #pragma pack(pop)
    

    getestet. Aber dennoch der gleiche Fehler.



  • Ist das ein default wert? Oder hat das was mit der Anzahl der zu nutzenden Bits zu tun?



  • Ist das ein default wert? Oder hat das was mit der Anzahl der zu nutzenden Bits zu tun?

    Genau. Die Anzahl der Bits werden dabei festgelegt.
    Schreibst du z.B.

    unsigned int x : 2;
    

    ,

    so ist deine Variable x in deiner Struktur lediglich 2 Bit breit und nimmt nicht die kompletten 32 bit eines Integers in Anspruch.

    Greetz
    Xzi-bit



  • So ich habe das Problem gelöst. Es lag daran, dass die network byte order in meiner struktur für big endian war und windows aber mit little endian arbeitet. Nachdem ich die Reihenfolge geändert habe klappts auch mit dem Versenden des Packets.



  • Es lag daran, dass die network byte order in meiner struktur für big endian war und windows aber mit little endian arbeitet. Nachdem ich die Reihenfolge geändert habe klappts auch mit dem Versenden des Packets.

    Köntet du mir vieleicht verraten WIE man sowas konkret ändert?



  • Eigentlich habe ich mir nur rausgesucht, wie die Reihenfolge in der Struktur sein muss und habe dieses umgestellt.

    //Anstatt so
    struct rtppacket 
    { 
        unsigned int version:2;         /* protocol version */ 
        unsigned int padding:1;         /* padding flag */ 
        unsigned int extension:1;       /* header extension flag */ 
        unsigned int csrcccount:4;      /* CSRC count */ 
        unsigned int marker:1;          /* marker bit */ 
        unsigned int payloadtype:7;     /* payload type */ 
        unsigned int sequencenumber:16; /* sequence number */ 
        u_int32_t timestamp;            /* timestamp */ 
        u_int32_t ssrc;                   /* synchronization source */ 
        u_int32_t csrc[1]; 
        void* datap; 
        int datalen; 
    } 
    
    //so
    struct rtppacket
    {
        u_int16_t cc:4;		/**< CSRC count			    */
        u_int16_t x:1;		/**< header extension flag	    */ 
        u_int16_t p:1;		/**< padding flag		    */
        u_int16_t v:2;		/**< packet type/version	    */
        u_int16_t pt:7;		/**< payload type		    */
        u_int16_t m:1;	
        u_int16_t seq:16;   /* sequence number */
        u_int32_t ts;       /* timestamp */
        u_int32_t ssrc;     /* synchronization source */
        u_int32_t csrc[1];  /*
    }
    

    Wie genau man herausfindet welches Endian das System verwendet muss ich selbst noch recherchieren:)


Anmelden zum Antworten