<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Wie Objekt per Sockets übertragen?]]></title><description><![CDATA[<p>Hiho,</p>
<p>ich bastel grade an einem kleinen Netzwerkkartenspiel, dass hinterher mal als Client-Server-Anwendung laufen soll.</p>
<p>Die Verbindung zwischen den Sockets von Client und Server steht schon, aber ich habe ein Problem damit dann konkrete Daten (z.B. Objekte der Klasse Karte) zu übertragen.</p>
<p>Meine Sendefunktion schaut bisher so aus:</p>
<pre><code>void Server::sendData(Karte* karte){
    int sendedBytes;
    sendedBytes=send(inputsocket1,(const char*)karte,sizeof(*karte),0);
    cout &lt;&lt; &quot;sendedBytes: &quot; &lt;&lt; sendedBytes;
}
</code></pre>
<p>und bei der Empfangsfunktion bin ich sehr unschlüssig wie das aussehen muss.</p>
<p>Wie mach ich das denn am Besten?<br />
Ich bin im Netz auf folgende Möglichekiten gestoßen:<br />
1. auf Empfängerseite ein bisschen rumzucasten<br />
2. auf eine externe lib wie boost zurückgreifen und serialisierung zu benutzen<br />
3. nur Attributwerte übertragen und beim Empfänger damit ein neues Element initialisieren</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/311754/wie-objekt-per-sockets-übertragen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 03 Aug 2026 05:37:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/311754.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 13 Dec 2012 21:51:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wie Objekt per Sockets übertragen? on Thu, 13 Dec 2012 21:51:58 GMT]]></title><description><![CDATA[<p>Hiho,</p>
<p>ich bastel grade an einem kleinen Netzwerkkartenspiel, dass hinterher mal als Client-Server-Anwendung laufen soll.</p>
<p>Die Verbindung zwischen den Sockets von Client und Server steht schon, aber ich habe ein Problem damit dann konkrete Daten (z.B. Objekte der Klasse Karte) zu übertragen.</p>
<p>Meine Sendefunktion schaut bisher so aus:</p>
<pre><code>void Server::sendData(Karte* karte){
    int sendedBytes;
    sendedBytes=send(inputsocket1,(const char*)karte,sizeof(*karte),0);
    cout &lt;&lt; &quot;sendedBytes: &quot; &lt;&lt; sendedBytes;
}
</code></pre>
<p>und bei der Empfangsfunktion bin ich sehr unschlüssig wie das aussehen muss.</p>
<p>Wie mach ich das denn am Besten?<br />
Ich bin im Netz auf folgende Möglichekiten gestoßen:<br />
1. auf Empfängerseite ein bisschen rumzucasten<br />
2. auf eine externe lib wie boost zurückgreifen und serialisierung zu benutzen<br />
3. nur Attributwerte übertragen und beim Empfänger damit ein neues Element initialisieren</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2279909</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2279909</guid><dc:creator><![CDATA[butterbemme]]></dc:creator><pubDate>Thu, 13 Dec 2012 21:51:58 GMT</pubDate></item><item><title><![CDATA[Reply to Wie Objekt per Sockets übertragen? on Thu, 13 Dec 2012 21:54:52 GMT]]></title><description><![CDATA[<p>1 wenn Karte ein POD ist (#pragma pack(1) nicht vergessen), ansonsten eher 3.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2279910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2279910</guid><dc:creator><![CDATA[Hi]]></dc:creator><pubDate>Thu, 13 Dec 2012 21:54:52 GMT</pubDate></item><item><title><![CDATA[Reply to Wie Objekt per Sockets übertragen? on Thu, 13 Dec 2012 21:55:56 GMT]]></title><description><![CDATA[<p>Du castest karte nach char*, das ist nie eine gute Idee. Gerade kürzlich in einem anderen Thread wird erklärt warum: <a href="http://www.c-plusplus.net/forum/311715" rel="nofollow">http://www.c-plusplus.net/forum/311715</a></p>
<p>Es bezieht sich zwar auf das Speichern in einer Datei, was aber grundsätzlich gleiche Probleme hat wie eine Netzwerkkommunikation.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2279911</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2279911</guid><dc:creator><![CDATA[kaast]]></dc:creator><pubDate>Thu, 13 Dec 2012 21:55:56 GMT</pubDate></item><item><title><![CDATA[Reply to Wie Objekt per Sockets übertragen? on Thu, 13 Dec 2012 23:18:27 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/28203">@butterbemme</a><br />
Die &quot;sauberste&quot; Lösung ist alles brav zu serialisieren. Ob jetzt mit Hand oder einer Serialisierungs-Library ... Geschmackssache würde ich sagen.<br />
Bzw. je komplexer die Datenstrukturen werden, desto eher würde ich ne fertige Library empfehlen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2279929</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2279929</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 13 Dec 2012 23:18:27 GMT</pubDate></item><item><title><![CDATA[Reply to Wie Objekt per Sockets übertragen? on Fri, 14 Dec 2012 01:24:17 GMT]]></title><description><![CDATA[<p>Du solltest dich denke ich gleich von dem Gedanken verabschieden, ein &quot;Objekt&quot; über das Netzwerk zu schicken. Das Problem ist einfach, dass Server und Client auf sehr unterschiedlichen Architekturen laufen können. Du kannst dich hier auf nichts verlassen: Alignment, Padding, Enianess. Du wirst nicht umher kommen in deinem Protokoll &quot;Typen&quot; zu definieren, und das auf Byte Ebene, für die du dann genau festlegst, wie sie gesendet werden. Das ist dann die Vereinbarung für Client und Server, so haben die Nachrichten auszusehen. Wie genau die Gegenseite das dann implementiert, wird irrelevant.<br />
Und damit du jetzt nicht verwirrt wirst: Das hat nichts mit Code zu tun. Dein Protokoll ist einfach nur eine Beschreibung des Ablaufs, den du festlegst. Mal ein Beispiel:</p>
<pre><code>All data is send in little endian byteorder.

Map:
  uint16 width
  uint16 height
  uint8 data[width * height]
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2279943</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2279943</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Fri, 14 Dec 2012 01:24:17 GMT</pubDate></item><item><title><![CDATA[Reply to Wie Objekt per Sockets übertragen? on Fri, 14 Dec 2012 02:51:48 GMT]]></title><description><![CDATA[<p>Och man kann auch einfach textbasierte Protokolle verwenden. Hat viele Vorteile, z.B. was Debugging angeht. Und wenn man das Format passend auslegt auch was Erweiterbarkeit angeht. XML ist z.B. keine dumme Idee. JSON wäre auch nicht ganz doof.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2279958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2279958</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 14 Dec 2012 02:51:48 GMT</pubDate></item><item><title><![CDATA[Reply to Wie Objekt per Sockets übertragen? on Fri, 14 Dec 2012 03:29:34 GMT]]></title><description><![CDATA[<p>Jau, textbasiert geht latürnich auch. Ich hätte das &quot;Byteebene&quot; nicht so betonen sollen. Ich meine damit nur, dass er (ohne Informationen über Compiler, System etc.) nicht wissen kann wie die Objekte im Speicher angeordnet sind, und er das deshalb selbst im Protokoll definieren muss, da ist das &quot;Byteebene&quot; irgendwie dazwischen gerutscht. :xmas1:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2279960</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2279960</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Fri, 14 Dec 2012 03:29:34 GMT</pubDate></item><item><title><![CDATA[Reply to Wie Objekt per Sockets übertragen? on Mon, 17 Dec 2012 23:21:43 GMT]]></title><description><![CDATA[<p>Danke für eure Antworten<br />
ich hab mich jetzt vorerst für Möglichkeit 3 entschieden und schau mal wies damit läuft</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2281033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2281033</guid><dc:creator><![CDATA[butterbemme]]></dc:creator><pubDate>Mon, 17 Dec 2012 23:21:43 GMT</pubDate></item><item><title><![CDATA[Reply to Wie Objekt per Sockets übertragen? on Tue, 18 Dec 2012 00:42:18 GMT]]></title><description><![CDATA[<p>Wenn Du das erste Mal einen Tisch per Socket überträgst und nicht bloß den Bauplan, dann melde Dich bitte bei mir, bevor Du an die Öffentlichkeit gehst!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2281036</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2281036</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 18 Dec 2012 00:42:18 GMT</pubDate></item><item><title><![CDATA[Reply to Wie Objekt per Sockets übertragen? on Wed, 19 Dec 2012 06:58:04 GMT]]></title><description><![CDATA[<p>Protocol Buffers? Wäre imho noch das beste, wenn es denn ein Binärformat sein soll. Hat zum Debuggen auch eine lesbare Textrepräsentation.</p>
<p>Das Boost::Serialization-Zeug wird sich ja eher nicht so richtig für sowas eignen, oder? Gibt es da schmerzfreie Wege das auf der anderen Seite ohne C++ und Boost wieder zu dekodieren? Auf allen Endpunkten auf C++ beschränkt zu sein, ist für ein Netzwerkprotokoll ja nicht sonderlich toll. Viele Features der Serialization-Library sind hier ja auch gar nicht nötig.</p>
<p>Unterstützung für Protocol Buffers gibt es für zahlreiche Sprachen/Systeme und das On-Wire-Format ist relativ simpel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2281387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2281387</guid><dc:creator><![CDATA[Kotnascher]]></dc:creator><pubDate>Wed, 19 Dec 2012 06:58:04 GMT</pubDate></item></channel></rss>