<?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[länge eines UDP-Paketes herrausfinden]]></title><description><![CDATA[<p>Hallo</p>
<p>der titel sagt es schon, wie kann man die größe eines angekommenen paketes<br />
herrausfinden ?</p>
<p>wenn ich die daten einfach nur empfange fliegt alles was nicht beim ersten<br />
mal kopiert wurde, raus. deshalb brauche ich die länge.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/222364/länge-eines-udp-paketes-herrausfinden</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Apr 2026 16:20:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/222364.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 11 Sep 2008 14:53:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to länge eines UDP-Paketes herrausfinden on Thu, 11 Sep 2008 14:53:27 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>der titel sagt es schon, wie kann man die größe eines angekommenen paketes<br />
herrausfinden ?</p>
<p>wenn ich die daten einfach nur empfange fliegt alles was nicht beim ersten<br />
mal kopiert wurde, raus. deshalb brauche ich die länge.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580357</guid><dc:creator><![CDATA[UhDehPeh]]></dc:creator><pubDate>Thu, 11 Sep 2008 14:53:27 GMT</pubDate></item><item><title><![CDATA[Reply to länge eines UDP-Paketes herrausfinden on Thu, 11 Sep 2008 18:19:40 GMT]]></title><description><![CDATA[<p>z.B.</p>
<pre><code class="language-cpp">result = recvfrom(socket, buffer, sizeof(buffer), 0, NULL, NULL);
</code></pre>
<p>wobei <strong>result</strong> die Anzahl der empfangenen Zeichen beträgt. Musst halt mal in der MSDN lesen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580457</guid><dc:creator><![CDATA[?.?.?.?]]></dc:creator><pubDate>Thu, 11 Sep 2008 18:19:40 GMT</pubDate></item><item><title><![CDATA[Reply to länge eines UDP-Paketes herrausfinden on Thu, 11 Sep 2008 20:50:29 GMT]]></title><description><![CDATA[<p>das ist mir durchaus bekannt, dass die funktion mir die länge gibt.<br />
allerdings nur maximal die bufferlänge. wenn mein buffer 256 bytes groß ist,<br />
die nachricht aber z.b. 1024 bytes, wie komme ich an die gesammtlänge?</p>
<p>klar ich könnte die bei jedem packet mit schicken <strong>aber</strong><br />
dann müsste die send funktion alles wegen 4 bytes (sollte als größe reichen)<br />
umkopieren <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> <strong>nicht</strong> schön<br />
oder ich schicke die länge vorneweg. UDP garantiert aber keine reihenfole<br />
mal ist die länge weg, mal das paket, mal überholen die sich...</p>
<p>es muss doch gehen, im UDP header steht doch auch die länge</p>
<p>hoffe man hat mein problem verstanden</p>
<p>mfg UhDehPeh</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580510</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580510</guid><dc:creator><![CDATA[UhDehPeh]]></dc:creator><pubDate>Thu, 11 Sep 2008 20:50:29 GMT</pubDate></item><item><title><![CDATA[Reply to länge eines UDP-Paketes herrausfinden on Thu, 11 Sep 2008 20:58:30 GMT]]></title><description><![CDATA[<p>Du hasts wohl echt nicht so mit Lesen, was?</p>
<p>MSDN schrieb:</p>
<blockquote>
<p>For message-oriented sockets, data is extracted from the first enqueued message, up to the size of the buffer specified. If the datagram or message is larger than the buffer specified, the buffer is filled with the first part of the datagram, and recvfrom generates the error WSAEMSGSIZE. For unreliable protocols (for example, UDP) the excess data is lost.</p>
</blockquote>
<p>Kurz: wenn du einen zu kleinen Puffer übergibst ist die Nachricht sowieso schon futsch, und du bekommst die Original-Länge auch nichtmehr raus.<br />
Also übergib einfach nen ausreichend grossen Puffer!?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580517</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 11 Sep 2008 20:58:30 GMT</pubDate></item><item><title><![CDATA[Reply to länge eines UDP-Paketes herrausfinden on Thu, 11 Sep 2008 21:15:10 GMT]]></title><description><![CDATA[<p>doch ich lese <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> sogar die remarks abteilung (echt) und da steht</p>
<blockquote>
<p>For unreliable protocols (for example, UDP) the excess data is lost.</p>
</blockquote>
<p>geht <strong>garnicht</strong>, ich kann die nachricht nicht einfach abschneiden</p>
<blockquote>
<p>Also übergib einfach nen ausreichend grossen Puffer!?!</p>
</blockquote>
<p>super, jeder socket hat MAX_UDP_SIZE (65kb) overhead juhu <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
nein auch in der heutigen zeit passe ich auf den speicher auf</p>
<p>was ich grade herausgefunden habe ist, dass man mit MSG_PEEK den ersten teil<br />
einlesen kann, wo dann die größe drinsteht (so implementiert)<br />
und dann für diese menge speicher anfordert</p>
<p>ideal ist das aber immernoch</p>
<p>ps:<br />
ich kenne diese msdn-seite bald auswendig!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580524</guid><dc:creator><![CDATA[UhDehPeh]]></dc:creator><pubDate>Thu, 11 Sep 2008 21:15:10 GMT</pubDate></item><item><title><![CDATA[Reply to länge eines UDP-Paketes herrausfinden on Fri, 12 Sep 2008 01:00:16 GMT]]></title><description><![CDATA[<p>Also.<br />
Wenn du blocking sockets verwendest hast du sowieso kein Problem, dann nimmst du die 64KB einfach vom Stack und fertig.</p>
<p>Wenn du nonblocking sockets mit select() verwendest genauso.</p>
<p>Wenn du overlapped IO verwendest... pfuh. Allerdings entzieht sich mir jetzt sowieso gerade wieso man bei UDP viele sockets brauchen sollte - schliesslich kann ich ja einen socket verwenden um mit allen meinen Peers zu sprechen. Und wenn man bloss einen oder ein paar wenige sockets hat, dann kann man sich die 64KB wohl leisten.</p>
<p>Falls das alles jetzt irgendwie nicht auf dein Problem anwendbar ist beschreib mal bitte wieso, bzw. was du für spezielle Anforderungen hast, vielleicht kann dir dann jmd. einen Tip geben. Die &quot;Lösung&quot; MSG_PEEK + Länge im Datagram mitschicken halte ich auf jeden Fall für nicht sehr elegant.</p>
<p>Davon abgesehen kennt man normalerweise die max. Grösse eines (gültigen) Datagrams anhand des Application-Protocols das man implementiert, und die liegt dann oft weit unter 64KB. Demzufolge braucht man dann auch keine 64KB Puffer, da ein Datagram das grösser als X ist eben nicht gültig sein kann,und man es daher sowieso verwerfen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580554</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 12 Sep 2008 01:00:16 GMT</pubDate></item><item><title><![CDATA[Reply to länge eines UDP-Paketes herrausfinden on Fri, 12 Sep 2008 11:49:38 GMT]]></title><description><![CDATA[<p>erstmal danke an alle die sich mit meinem problem beschäftigen!</p>
<p>ok also der ganze hintergrund</p>
<p>ich habe mir eine kleine netzwerklibrary geschrieben um unkompliziert<br />
und vor allen objektorientiert daten leicht von A nach B zu versenden</p>
<p>Natürlich sind die sockets auch gekapselt d.h. ich habe dafür die<br />
entsprechenden methoden</p>
<p>TCP funktioniert auch super, nur hat TCP protokollbedingt eine zu<br />
hohe latenzzeit als das man damit schnelle netzwerkspiele schreiben könnte</p>
<p>deshalb sollen die sockets auch UDP unterstützen, und zwar blocking</p>
<p>da alle sockets eines prozesses von einer netwerkklasse verwaltet<br />
werden, könnte ich den buffer einmal anlegen. dann hätte ich den zusätzlichen<br />
speicher nur einmal.</p>
<p>die datenmengen werden sich sowieso unter 64kb bewegen, für große mengen<br />
nimmt die klasse dann TCP</p>
<p>ich teste mal den stackbuffer</p>
<p><strong>hustbaer:</strong><br />
warum ist diese 'Lösung' mit MSG_PEEK nicht elegant?<br />
um die vergrößerung um 4 Bytes konnte ich mich auch geschickt drücken,<br />
daran scheitet es also nicht</p>
<p>mfg UhdefPeh</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580858</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580858</guid><dc:creator><![CDATA[UhDehPeh]]></dc:creator><pubDate>Fri, 12 Sep 2008 11:49:38 GMT</pubDate></item><item><title><![CDATA[Reply to länge eines UDP-Paketes herrausfinden on Fri, 12 Sep 2008 12:45:37 GMT]]></title><description><![CDATA[<blockquote>
<p>warum ist diese 'Lösung' mit MSG_PEEK nicht elegant?<br />
um die vergrößerung um 4 Bytes konnte ich mich auch geschickt drücken,<br />
daran scheitet es also nicht</p>
</blockquote>
<p>weil du mit MSG_PEEK zwei aufrufe brauchst wo sonst einer reicht.<br />
ich fände es einfach &quot;hässlich&quot;.</p>
<p>vor allem da die variante mit stack buffer viel einfacher, übersichtlicher, kürzer etc. ist.</p>
<pre><code class="language-cpp">char buffer[1024*64];
int rc = recvfrom(...);
</code></pre>
<p>und 64KB auf dem stack sind nix wovor man sich jetzt fürchten müsste. vorausgesetzt die funktion ist nicht rekursiv, und das programm läuft auf einer plattform die mächtiger ist als eine armbanduhr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580914</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580914</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 12 Sep 2008 12:45:37 GMT</pubDate></item></channel></rss>