<?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[TCP Packete werden geschnitten in einzelne stücke (SERVER + CLIENT PROGRAMMIERUNG)]]></title><description><![CDATA[<p>Hallo leute,</p>
<p>ich habe folgendes Problem. Habe ein kleines Server Client Programm geschrieben, welches von der Server Seite aus völlig funktioniert.</p>
<p>Nun wenn ich in mein C++ Code die Daten in mein Socket abrufe und mir die anzeige, muss ich die Daten mehrmals abrufen am socket, damit ich erst die ganzen Daten zu sehen bekomme, welche gesendet wurden.</p>
<p>Es schneidet mir die TCP Packete in einzelne kleine Paket, sodass ich die Daten mehrmals abrufen muss um sie vollständig zu sehen...</p>
<p>Ich rufe die Daten vom Socket wie folgt auf:</p>
<p>Verbindung aufgebaut ...</p>
<p>void receive(){</p>
<p>void vector&lt;char&gt; rec(256);<br />
int bytes = recv(sock, &amp;rec[0], rec.size()-1,0);<br />
string data(rec.begin(),rec.begin()+bytes);</p>
<p>cout&lt;&lt;&quot;Daten:&quot;&lt;&lt;data&lt;&lt;endl;</p>
<p>Ausgabe.... (Nach mehrmaligen Aufruf der Methode)</p>
<p>Out: &quot;Daten: Hal&quot;<br />
Out: &quot;Daten: loWelt2&quot;<br />
Out: &quot;Daten: 123&quot;</p>
<p>Ausgabe.... Wünschenswert</p>
<p>Out: &quot;Daten: HalloWelt2123&quot;</p>
<p>Ich hoffe ihr könnt mir da ein bisschen behilflich sein zu Weinachten! Bitte!</p>
<p>Danke im vorraus!!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/279226/tcp-packete-werden-geschnitten-in-einzelne-stücke-server-client-programmierung</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 17:20:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/279226.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 21 Dec 2010 12:50:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to TCP Packete werden geschnitten in einzelne stücke (SERVER + CLIENT PROGRAMMIERUNG) on Tue, 21 Dec 2010 12:50:48 GMT]]></title><description><![CDATA[<p>Hallo leute,</p>
<p>ich habe folgendes Problem. Habe ein kleines Server Client Programm geschrieben, welches von der Server Seite aus völlig funktioniert.</p>
<p>Nun wenn ich in mein C++ Code die Daten in mein Socket abrufe und mir die anzeige, muss ich die Daten mehrmals abrufen am socket, damit ich erst die ganzen Daten zu sehen bekomme, welche gesendet wurden.</p>
<p>Es schneidet mir die TCP Packete in einzelne kleine Paket, sodass ich die Daten mehrmals abrufen muss um sie vollständig zu sehen...</p>
<p>Ich rufe die Daten vom Socket wie folgt auf:</p>
<p>Verbindung aufgebaut ...</p>
<p>void receive(){</p>
<p>void vector&lt;char&gt; rec(256);<br />
int bytes = recv(sock, &amp;rec[0], rec.size()-1,0);<br />
string data(rec.begin(),rec.begin()+bytes);</p>
<p>cout&lt;&lt;&quot;Daten:&quot;&lt;&lt;data&lt;&lt;endl;</p>
<p>Ausgabe.... (Nach mehrmaligen Aufruf der Methode)</p>
<p>Out: &quot;Daten: Hal&quot;<br />
Out: &quot;Daten: loWelt2&quot;<br />
Out: &quot;Daten: 123&quot;</p>
<p>Ausgabe.... Wünschenswert</p>
<p>Out: &quot;Daten: HalloWelt2123&quot;</p>
<p>Ich hoffe ihr könnt mir da ein bisschen behilflich sein zu Weinachten! Bitte!</p>
<p>Danke im vorraus!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997567</guid><dc:creator><![CDATA[Nikolaus123]]></dc:creator><pubDate>Tue, 21 Dec 2010 12:50:48 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Packete werden geschnitten in einzelne stücke (SERVER + CLIENT PROGRAMMIERUNG) on Tue, 21 Dec 2010 13:02:54 GMT]]></title><description><![CDATA[<p>Das ist kein Problem, sondern völlig normal, damit muss dein Programm zurechtkommen.</p>
<p>Wenn deine Daten in &quot;Pakete&quot; organisiert sind, die nicht immer gleich groß sind, dann musst du diese Information mitsenden und beim Empfang auswerten. Allgemein gesagt musst du ein Protokoll festlegen und umsetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997570</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 21 Dec 2010 13:02:54 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Packete werden geschnitten in einzelne stücke (SERVER + CLIENT PROGRAMMIERUNG) on Tue, 21 Dec 2010 13:10:37 GMT]]></title><description><![CDATA[<p>Ist es denn irgendwie möglich, dass er mir dann die Empfangenen Daten immer hinten an den String anhängt ? Wie müsste dann mein String aussehen !?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997575</guid><dc:creator><![CDATA[Nikolaus123]]></dc:creator><pubDate>Tue, 21 Dec 2010 13:10:37 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Packete werden geschnitten in einzelne stücke (SERVER + CLIENT PROGRAMMIERUNG) on Tue, 21 Dec 2010 13:14:39 GMT]]></title><description><![CDATA[<p>Nikolaus123 schrieb:</p>
<blockquote>
<p>Wie müsste dann mein String aussehen !?</p>
</blockquote>
<p>std::string s;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997577</guid><dc:creator><![CDATA[Stringverketter]]></dc:creator><pubDate>Tue, 21 Dec 2010 13:14:39 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Packete werden geschnitten in einzelne stücke (SERVER + CLIENT PROGRAMMIERUNG) on Tue, 21 Dec 2010 13:27:05 GMT]]></title><description><![CDATA[<p>Nikolaus123 schrieb:</p>
<blockquote>
<p>Ist es denn irgendwie möglich, dass er mir dann die Empfangenen Daten immer hinten an den String anhängt ? Wie müsste dann mein String aussehen !?</p>
</blockquote>
<p>Anhängen ist nicht das Problem. Das Problem ist, zu erkennen, wann dein String fertig empfangen wurde. Diese Information musst du auf Serverseite in den Datenstrom einbauen. Zeilenumbruch, Nullbyte, Länge vorab oder wie auch immer.</p>
<p>Du musst übrigens auch damit rechnen, dass du das Ende eines String gleich zusammmen mit dem Anfang des nächsten Strings empfängst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997582</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 21 Dec 2010 13:27:05 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Packete werden geschnitten in einzelne stücke (SERVER + CLIENT PROGRAMMIERUNG) on Tue, 21 Dec 2010 13:47:36 GMT]]></title><description><![CDATA[<p>ok das mit dem String funktioniert zwar wie ich möchte, aber ist nicht gerade das was ich mir vorgestellt habe!</p>
<p>Die server seite sendet eine null terminierung, könnte ich anhand dessen die nachricht solange abrufen bis ich die null terminierung erhalte ? Wenn ja wie ?</p>
<p>danke&quot;!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997596</guid><dc:creator><![CDATA[Nikolaus123]]></dc:creator><pubDate>Tue, 21 Dec 2010 13:47:36 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Packete werden geschnitten in einzelne stücke (SERVER + CLIENT PROGRAMMIERUNG) on Tue, 21 Dec 2010 14:36:14 GMT]]></title><description><![CDATA[<p>Nikolaus123 schrieb:</p>
<blockquote>
<p>Die server seite sendet eine null terminierung, könnte ich anhand dessen die nachricht solange abrufen bis ich die null terminierung erhalte ?</p>
</blockquote>
<p>Du musst die abgerufenen Daten daraufhin prüfen, ob ein Nullbyte drin ist. Das kann mittendrin sein, denn dahinter kann auch schon der Anfang vom nächsten String stehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997619</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997619</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 21 Dec 2010 14:36:14 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Packete werden geschnitten in einzelne stücke (SERVER + CLIENT PROGRAMMIERUNG) on Tue, 21 Dec 2010 14:37:02 GMT]]></title><description><![CDATA[<p>Indem du solange read'est, bis das letzte Byte aus einem read-Aufruf einer Nullterminierung entspricht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997620</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 21 Dec 2010 14:37:02 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Packete werden geschnitten in einzelne stücke (SERVER + CLIENT PROGRAMMIERUNG) on Tue, 21 Dec 2010 15:27:32 GMT]]></title><description><![CDATA[<p>Eigentlich sollten die Daten alle auf einmal kommen, bei der Datenlänge. Außer die wirklichen Daten sind viel größer. Es kommt aber auch darauf an, wie du die Daten versendest? Und es ist auch nicht sinnvoll einfach so ins blaue Daten anzufordern. Dass kann man zum Beispiel regeln, indem man zuerst die Datengröße vor der Nachricht sendet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997640</guid><dc:creator><![CDATA[Paul Müller]]></dc:creator><pubDate>Tue, 21 Dec 2010 15:27:32 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Packete werden geschnitten in einzelne stücke (SERVER + CLIENT PROGRAMMIERUNG) on Tue, 21 Dec 2010 16:30:44 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">std::string str;

for(char c; recv(socket, &amp;c, 1, 0) &gt; 0;)
{
 if (c == '\0')
 {
  break;
 }

 str += c;
}
</code></pre>
<p>Ist allerdings sehr ineffizient. Du solltest dafür in naher Zukunft eine bessere Lösung suchen, welche einen größeren Buffer verwendet.</p>
<p>Beim Senden mit <code>send</code> musst du natürlich auch darauf achten, dass du das Nullbyte mitsendest. Also <code>strlen(str) + 1</code> Bytes senden!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997660</guid><dc:creator><![CDATA[kljhkl]]></dc:creator><pubDate>Tue, 21 Dec 2010 16:30:44 GMT</pubDate></item></channel></rss>