Objekte und Sockets



  • Hallo,

    ich wollte euch mal fragen ob es eine Möglichkeit gibt mittels WinSock´s von einem Client auf einem Server eine Objektinstanz zu übertragen. Die Funktion send() bietet nur char´s. Meine Klasse von der das Objekt gebildet wird enthält Daten wie z.B. Vorname,Nachname,Ort etc.. Ich hab in Google darauf keine Antwort gefunden.
    MfG

    Froggi



  • Jein, du kannst aber einen Strukt darüberschieben 😉

    http://bytes.com/groups/c/623055-sending-struct-over-tcp



  • Der Sender konvertiert die struct in ein Bytearray, der Empfänger konvertiert das Bytearray zurück in die struct.
    Einfach reinterpret_cast<> zusammen mit #pragma pack(1) o.Ä. verwenden.

    MfG



  • SFML arbeitet mit schicken Paketen:

    class MyNeatClass
    {
        public:
            // ...
    
    		friend sf::Packet& operator<<( sf::Packet& packet, const MyNeatClass& cl )
    		{
    			packet << cl.i << cl.j << cl.k;
    			return packet;
    		}
    
    		friend sf::Packet& operator>>( sf::Packet& packet, MyNeatClass& cl )
    		{
    			packet >> cl.i >> cl.j >> cl.k;
    			return packet;
    		}
    
        private:
            int i;
            double j;
            std::string k;
    };
    
    // ----- Client-Seite ----- //
    
    // Socket erstellen, verbinden
    sf::SocketTCP s;
    s.Connect( 12345, "192.168.0.123" );
    
    // Objektinstanz
    MyNeatClass obj;
    
    // Objekt in Paket packen und verschicken
    sf::Packet packet;
    packet << obj;
    s.Send( packet );
    
    // ----- Server-Seite ----- //
    
    // Socket erstellen, Lauschen, Client annehmen
    sf::SocketTCP s;
    s.Listen( 12345 );
    
    sf::SocketTCP client;
    s.Accept( client );
    
    // Objektinstanz erstellen
    MyNeatClass obj;
    
    // Empfangen...
    sf::Packet packet;
    client.Receive( packet );
    
    // ...und entpacken
    packet >> obj;
    


  • Nice dankeschön 😃



  • mittels WinSock´s von einem Client auf einem Server eine Objektinstanz zu übertragen

    Indem du dir ein (binaeres) Serialisierungskonzept ueberlegst. Von reinterpret_cast etc. halte ich nicht viel, hinzu kommt fuer gewoehnlich, dass die Byteorder beruecksichtigt werden muss.


Anmelden zum Antworten