<?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[Frage zu recv() und send()]]></title><description><![CDATA[<p>Hallo und zwar habe ich ne Frage zu send() und recv().<br />
Wieso geht folgendes nicht:</p>
<pre><code class="language-cpp">send(sock,buffer,strlen(buffer),0);

recv(sock,buffer,strlen(buffer),0);
</code></pre>
<p>Aber wieso geht:</p>
<pre><code class="language-cpp">send(sock,buffer,sizeof(buffer),0);

recv(sock,buffer,sizeof(buffer),0);
</code></pre>
<p>Bin mal auf die Antworten gespannt.<br />
^^</p>
<p>Mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/219216/frage-zu-recv-und-send</link><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Apr 2026 18:28:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/219216.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 30 Jul 2008 20:55:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu recv() und send() on Wed, 30 Jul 2008 20:55:07 GMT]]></title><description><![CDATA[<p>Hallo und zwar habe ich ne Frage zu send() und recv().<br />
Wieso geht folgendes nicht:</p>
<pre><code class="language-cpp">send(sock,buffer,strlen(buffer),0);

recv(sock,buffer,strlen(buffer),0);
</code></pre>
<p>Aber wieso geht:</p>
<pre><code class="language-cpp">send(sock,buffer,sizeof(buffer),0);

recv(sock,buffer,sizeof(buffer),0);
</code></pre>
<p>Bin mal auf die Antworten gespannt.<br />
^^</p>
<p>Mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556687</guid><dc:creator><![CDATA[Winsocket]]></dc:creator><pubDate>Wed, 30 Jul 2008 20:55:07 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu recv() und send() on Wed, 30 Jul 2008 21:20:17 GMT]]></title><description><![CDATA[<p>Weil beides Blödsinn ist, nur das 2. in dem Fall vermutlich &quot;trotzdem geht&quot;. Was aber nicht garantiert ist.<br />
Lies die Doku zu den Funktionen send, recv und strlen (MSDN), da steht alles drin. Und sizeof gleich noch mit nachlesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556698</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 30 Jul 2008 21:20:17 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu recv() und send() on Wed, 30 Jul 2008 21:27:54 GMT]]></title><description><![CDATA[<blockquote>
<p>len [in]</p>
<p>The length, in bytes, of the buffer pointed to by the buf parameter.</p>
</blockquote>
<p>Das heißt ich muss das manuell angeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556700</guid><dc:creator><![CDATA[Winsocket]]></dc:creator><pubDate>Wed, 30 Jul 2008 21:27:54 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu recv() und send() on Thu, 31 Jul 2008 01:06:34 GMT]]></title><description><![CDATA[<p>Nein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556744</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 31 Jul 2008 01:06:34 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu recv() und send() on Thu, 31 Jul 2008 12:53:10 GMT]]></title><description><![CDATA[<p>sizeof: Returns the number of bytes in variable or type.<br />
len: The length, in bytes, of the buffer pointed to by the buf parameter.</p>
<p>sizeof muesste gehen wenn buffer ein in derselben Funktion deklariertes array ist, geht nicht wenn buffer ein pointer auf einen Bereich unbekannter Groesse ist.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13960">@hustbaer</a><br />
wie sieht dann eine akzeptable Lösung aus, bei variablen Buffergrössen?</p>
<p>Gruss Charlie007</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1557021</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1557021</guid><dc:creator><![CDATA[Charlie007]]></dc:creator><pubDate>Thu, 31 Jul 2008 12:53:10 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu recv() und send() on Thu, 31 Jul 2008 12:59:39 GMT]]></title><description><![CDATA[<p>Charlie007 schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13960">@hustbaer</a><br />
wie sieht dann eine akzeptable Lösung aus, bei variablen Buffergrössen?</p>
</blockquote>
<p>Die Grösse ist dem Ersteller des Buffers bekannt.<br />
Also, z.B. weiterreichen.<br />
Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1557024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1557024</guid><dc:creator><![CDATA[simon.gysi]]></dc:creator><pubDate>Thu, 31 Jul 2008 12:59:39 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu recv() und send() on Thu, 31 Jul 2008 13:19:46 GMT]]></title><description><![CDATA[<blockquote>
<p>Die Grösse ist dem Ersteller des Buffers bekannt.<br />
Also, z.B. weiterreichen.<br />
Simon</p>
</blockquote>
<p>Also dann:</p>
<pre><code class="language-cpp">char buffer[50];

send(sock,buffer,50,0);

recv(sock,buffer,50,0);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1557039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1557039</guid><dc:creator><![CDATA[Winsocket]]></dc:creator><pubDate>Thu, 31 Jul 2008 13:19:46 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu recv() und send() on Thu, 31 Jul 2008 13:32:05 GMT]]></title><description><![CDATA[<p>Natürlich kann man sizeof verwenden, wenn es sich um ein statisches Array handelt. Bloss garantiert recv nicht dass wenn man z.B. 50 übergibt auch 50 Bytes empfangen werden.<br />
Von daher kann ich mir kaum Situationen vorstellen wo ein &quot;sizeof(buffer)&quot; oder auch direkt &quot;50&quot; im recv Aufruf steht, und es kein Fehler wäre. Weil man eben einfach (fast) immer einen retry-Loop braucht, der &quot;den Rest&quot; holt wenn recv weniger empfangen hat als man braucht.</p>
<p>p.S.: wenn man einen nullterminierten String schicken möchte muss man bei send strlen+1 übregeben, und bei recv jeweils immer nur 1, solange bis man eben ein Nullbyte empfängt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1557044</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1557044</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 31 Jul 2008 13:32:05 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu recv() und send() on Thu, 31 Jul 2008 18:40:04 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Weil man eben einfach (fast) immer einen retry-Loop braucht, der &quot;den Rest&quot; holt wenn recv weniger empfangen hat als man braucht.
</code></pre>
<p>Ja gut aber wie kann ich feststellen wie viel recv braucht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1557198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1557198</guid><dc:creator><![CDATA[Winsocket]]></dc:creator><pubDate>Thu, 31 Jul 2008 18:40:04 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu recv() und send() on Thu, 31 Jul 2008 20:58:12 GMT]]></title><description><![CDATA[<p>Was meinst du, &quot;wieviel recv braucht&quot;?<br />
Verstehe echt nicht worauf du hinaus willst, das hat jetzt nichtmal mit der Bösartigkeit zu tun die mich manchmal überkommt... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1557283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1557283</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 31 Jul 2008 20:58:12 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu recv() und send() on Fri, 01 Aug 2008 02:38:55 GMT]]></title><description><![CDATA[<p>recv() holt einfach ab was so da ist.<br />
Sagen wir mal du verschickst per Post nen Stapel durchnummerierter Blätter. Dummerweise wiegt der Stapel dermaßen viel das die Post das nicht als ein Paket verschicken kann. Also teilst du den Stapel auf x-beliebig viele und x-beliebig große kleinere Pakete auf und schickst die nacheinander los. (Das wäre quasi &quot;send&quot;)</p>
<p>So, der Empfänger des Stapels Blätter geht nun alle paar Meter zu seinem Briefkasten und stellt fest: oha, 15 Blätter angekommen! Etwas später geht er nochmal hin: Yeah, diesmal liegen 8 Blätter im Briefkasten. Das geht dann so weiter bis er den gesamten Stapel bekommen hat. (Das wäre &quot;recv&quot;)</p>
<p>Woher weiss der Empfänger überhaupt das er den gesamten Stapel Blätter bekommen hat? Gar nicht sofern er nicht sowieso schon wusste wieviele Blätter es sind (z.B. wenn es immer 100 Blätter sind). Der Sender könnte die Anzahl der Blätter direkt als erstes gesendet haben oder der Empfänger könnte es möglicherweise irgendwie an dem letzten Blatt erkennen.</p>
<p>Hmm, ok. Stapel Blätter ist nicht sehr anschaulich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";D"
      alt="😉"
    /></p>
<p>send()/recv() ist sozusagen ein Stream. send() kloppt Bytes in den Stream rein, recv() holt Daten aus nem Stream raus. recv() hat keinen Plan wieviele Daten im Stream wohl sein könnten - Es könnten ja jederzeit via send() neue Daten in den Stream geschrieben werden.</p>
<p>Das was man recv() da gibt ist lediglich ein Puffer wo recv() die Daten die es gerade aus dem Stream ziehen kann ablegt. Dabei könnten weniger Daten verfügbar sein als in den Puffer passen oder genauso viele oder mehr Daten. Damit man weiss wieviel recv() einem da in den Puffer geschrieben hat gibt es den Rückgabewert.</p>
<p>Verschickst du zum Beispiel den String &quot;HALLO!&quot;, könnte beim Empfänger, z.B. weil die inet-Leitung gerade verdammt lahm ist, erstmal nur &quot;HAL&quot; ankommen.<br />
Du rufst nun recv(socket,buffer,10,0) auf. In buffer würde jetzt &quot;HAL&quot; geschrieben und recv() würde 3 zurückliefern.<br />
Um den Rest abzuholen rufst du jetzt nochmal recv() auf, es schreibt diesmal zum Beispiel &quot;LL&quot; in buffer und gibt 2 zurück.<br />
Beim nächsten recv() Aufruf würde meinetwegen der Rest &quot;O!&quot; in den Puffer geschrieben und 2 zurückgeliefert.<br />
Der Puffer wurde dabei immer überschrieben! Die ankommenden Einzelteile müsste man sich selber irgendwie zusammenbasteln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1557330</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1557330</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Fri, 01 Aug 2008 02:38:55 GMT</pubDate></item></channel></rss>