tcp socket data decoding?



  • Hallo zusammen,

    ich würde gerne von euch wissen, welche c++ datenstruktur ihr zum decodieren der daten benutzen würdet, welche von einem data stream socket empfangen werden?

    Beispiel:

    int main()
    {
        while(1)
        {
            char buffer[1024];
            int numberBytes = socket->read(&buffer,1024);
            manageData(buffer,numberBytes);
        }
    }
    
    void manageData(void *buffer, int length)
    {
        //append the data to the whole data buffer (which data structure should i   use here?)
        //extract complete messages out of the whole buffer  
        //delete messages out of the whole buffer
    }
    


  • sf::Packet (von SFML) könntest du benutzen.

    Ansonsten kommts drauf an, was du für Daten empfängst. Schreibst du den code der die daten zu dir sendet selbst, oder gibts da was vorgegebenes?



  • 1. Du brauchst ein Framing Protokoll, falls Du das noch nicht hast. Das dient dazu die einzelnen Meldungen (die in einem Datenstrom daherkommen) auseinander zu halten.
    2. Weiter brauchst Du dann ein Serialisierungs Mechanismus, der Objekte in Bytes umwandelt und zurück. Bsp. für Libraries sind Google Protocol Buffers (http://code.google.com/p/protobuf/) oder Boost.Serialization (http://www.boost.org/doc/libs/1_47_0/libs/serialization/doc/index.html)



  • Kommt auf die Daten an. Wenn es ein Klartext-Protokoll ist, nehme ich einfach \r\n als Delimiter. Wenn es verschiedene Daten sind, sende ich Binär und verpacke meine Daten in Pakete, die ich durchnummeriere und bei jedem Paket die jeweilige ID mitsende.


Anmelden zum Antworten