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.
MfGFroggi
-
Jein, du kannst aber einen Strukt darüberschieben

-
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.