<?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[UDP SOCKADDR_IN Problem&#x2F; Frage]]></title><description><![CDATA[<p>Guten Tag,<br />
ich moechte mehrere UDP Datenverbindungen verwalten, ich habe schon von unterschiedlichen Ansätzen gelesen (z.B. Select(fdset), Prozesse). Aber warum funktioniert folgende Idee nicht? Muss die Verbindung an einen Socket gebunden werden, aber da UDP &quot;verbindungslos&quot; ist, duerfte das doch keine Rolle spielen. bzw. keinen hohen Aufwand erfordern. Danke <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=";)"
      alt="😉"
    /></p>
<pre><code class="language-cpp">SOCKADDR_IN remoteAddr;
vector&lt;SOCKADDR_IN*&gt; clients;
bytes=recvfrom(s,buf,BUF_SIZE,0,(SOCKADDR*)&amp;remoteAddr,&amp;addrlen);
clients.push_back(&amp;remoteAddr);
</code></pre>
<p>Warum funktioniert folgender Aufruf nicht? (keine Fehlermeldung)</p>
<pre><code class="language-cpp">bytes=sendto (s,buf,strlen(buf),0,(SOCKADDR*)clients[0],sizeof(SOCKADDR_IN));
</code></pre>
<p>Gruß,<br />
Marcel</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/255073/udp-sockaddr_in-problem-frage</link><generator>RSS for Node</generator><lastBuildDate>Sat, 12 Sep 2026 02:13:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/255073.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 25 Nov 2009 13:22:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to UDP SOCKADDR_IN Problem&#x2F; Frage on Wed, 25 Nov 2009 13:22:02 GMT]]></title><description><![CDATA[<p>Guten Tag,<br />
ich moechte mehrere UDP Datenverbindungen verwalten, ich habe schon von unterschiedlichen Ansätzen gelesen (z.B. Select(fdset), Prozesse). Aber warum funktioniert folgende Idee nicht? Muss die Verbindung an einen Socket gebunden werden, aber da UDP &quot;verbindungslos&quot; ist, duerfte das doch keine Rolle spielen. bzw. keinen hohen Aufwand erfordern. Danke <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=";)"
      alt="😉"
    /></p>
<pre><code class="language-cpp">SOCKADDR_IN remoteAddr;
vector&lt;SOCKADDR_IN*&gt; clients;
bytes=recvfrom(s,buf,BUF_SIZE,0,(SOCKADDR*)&amp;remoteAddr,&amp;addrlen);
clients.push_back(&amp;remoteAddr);
</code></pre>
<p>Warum funktioniert folgender Aufruf nicht? (keine Fehlermeldung)</p>
<pre><code class="language-cpp">bytes=sendto (s,buf,strlen(buf),0,(SOCKADDR*)clients[0],sizeof(SOCKADDR_IN));
</code></pre>
<p>Gruß,<br />
Marcel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1813294</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1813294</guid><dc:creator><![CDATA[mmarcel1]]></dc:creator><pubDate>Wed, 25 Nov 2009 13:22:02 GMT</pubDate></item><item><title><![CDATA[Reply to UDP SOCKADDR_IN Problem&#x2F; Frage on Wed, 25 Nov 2009 13:28:03 GMT]]></title><description><![CDATA[<p>Ein bisschen wenig Kontext, aber es sieht so aus, als würdest Du SOCKADDR_IN Pointer in clients speichern. Vermutlich ist das Objekt danach aber nicht mehr gültig (z.B. weil Du recvfrom(..) und sendto(..) in verschiedenen Scopes hast).<br />
Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1813300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1813300</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Wed, 25 Nov 2009 13:28:03 GMT</pubDate></item><item><title><![CDATA[Reply to UDP SOCKADDR_IN Problem&#x2F; Frage on Wed, 25 Nov 2009 13:43:19 GMT]]></title><description><![CDATA[<p>theta schrieb:</p>
<blockquote>
<p>Ein bisschen wenig Kontext, aber es sieht so aus, als würdest Du SOCKADDR_IN Pointer in clients speichern. Vermutlich ist das Objekt danach aber nicht mehr gültig (z.B. weil Du recvfrom(..) und sendto(..) in verschiedenen Scopes hast).<br />
Simon</p>
</blockquote>
<p>scopes? wie kann ich denn das problem umgehen das es dennoch gueltig ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1813322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1813322</guid><dc:creator><![CDATA[mmarcel1]]></dc:creator><pubDate>Wed, 25 Nov 2009 13:43:19 GMT</pubDate></item><item><title><![CDATA[Reply to UDP SOCKADDR_IN Problem&#x2F; Frage on Wed, 25 Nov 2009 14:22:59 GMT]]></title><description><![CDATA[<p>Entweder:<br />
Speichere die SOCKADDR_IN Objekte in der Liste als Wert, nicht als Pointer.<br />
Beim Zugriff holst Du dir dann (via Referenz) den Pointer.<br />
Dazu ist aber eine std::list nötig (std::vector geht nicht, da allenfalls umkopiert wird).</p>
<p>Oder:<br />
Du erzeugst deine SOCKADDR_IN Objekte auf dem Heap. (Löschen nicht vergessen...).</p>
<p>Simon</p>
<p>Edit: Ich sehe gerade, dass kopieren des Vectors und deren Elemente kein Problem darstellt. <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="➡"
    /> std::vector geht auch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1813343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1813343</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Wed, 25 Nov 2009 14:22:59 GMT</pubDate></item><item><title><![CDATA[Reply to UDP SOCKADDR_IN Problem&#x2F; Frage on Wed, 25 Nov 2009 19:10:02 GMT]]></title><description><![CDATA[<p>theta schrieb:</p>
<blockquote>
<p>Entweder:<br />
Speichere die SOCKADDR_IN Objekte in der Liste als Wert, nicht als Pointer.<br />
Beim Zugriff holst Du dir dann (via Referenz) den Pointer.<br />
Dazu ist aber eine std::list nötig (std::vector geht nicht, da allenfalls umkopiert wird).</p>
<p>Oder:<br />
Du erzeugst deine SOCKADDR_IN Objekte auf dem Heap. (Löschen nicht vergessen...).</p>
<p>Simon</p>
<p>Edit: Ich sehe gerade, dass kopieren des Vectors und deren Elemente kein Problem darstellt. <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="➡"
    /> std::vector geht auch.</p>
</blockquote>
<p>Mhh okay, war folgendes gemeint?</p>
<pre><code class="language-cpp">SOCKADDR_IN remoteAddr;
vector&lt;SOCKADDR_IN*&gt; clients;
bytes=recvfrom(s,buf,BUF_SIZE,0,(SOCKADDR*)&amp;remoteAddr,&amp;addrlen);
clients.push_back(remoteAddr); 
.....
bytes=sendto (s,buf,strlen(buf),0,(SOCKADDR*)&amp;clients[0],sizeof(SOCKADDR_IN));
</code></pre>
<p>das funktioniert bei mir nämlich nicht. Habe ich einen Denkfehler?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1813530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1813530</guid><dc:creator><![CDATA[mmarcel1]]></dc:creator><pubDate>Wed, 25 Nov 2009 19:10:02 GMT</pubDate></item><item><title><![CDATA[Reply to UDP SOCKADDR_IN Problem&#x2F; Frage on Thu, 26 Nov 2009 09:19:53 GMT]]></title><description><![CDATA[<p>Ich meinte nicht so. Du speicherst immer noch Pointer.</p>
<p>Zeigmal ein wenig mehr Code.</p>
<p>Ist das Teil einer Klasse? Was sind Member (der clients vector?)?</p>
<p>Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1813694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1813694</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Thu, 26 Nov 2009 09:19:53 GMT</pubDate></item><item><title><![CDATA[Reply to UDP SOCKADDR_IN Problem&#x2F; Frage on Thu, 26 Nov 2009 14:11:41 GMT]]></title><description><![CDATA[<p>theta schrieb:</p>
<blockquote>
<p>Ich meinte nicht so. Du speicherst immer noch Pointer.</p>
<p>Zeigmal ein wenig mehr Code.</p>
<p>Ist das Teil einer Klasse? Was sind Member (der clients vector?)?</p>
<p>Simon</p>
</blockquote>
<p>Nein ich speicher jetzt nicht mehr als pointer, wie dem &quot;&amp;&quot; zu entnehmen ist. Ich habe nur das * vergessen zu löschen: vector&lt;SOCKADDR_IN*&gt; clients; was ich selbstverständlich im code getan habe.</p>
<p>Ich bin dankbar fuer weitere Vorschläge <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="🙂"
    /> Ich wüsste jetzt nicht genau was dir noch an code weiter helfen wuerde?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1813808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1813808</guid><dc:creator><![CDATA[mmarcel1]]></dc:creator><pubDate>Thu, 26 Nov 2009 14:11:41 GMT</pubDate></item><item><title><![CDATA[Reply to UDP SOCKADDR_IN Problem&#x2F; Frage on Sun, 29 Nov 2009 00:12:22 GMT]]></title><description><![CDATA[<p>nabend <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="🙂"
    /> ich bin immer noch dankbar fuer ideen, warum die addresse, nicht mehr nutzbar ist. oder fuer den hinweis, dass ich auch bei udp den socket mitspeichern muss. danke <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1814773</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1814773</guid><dc:creator><![CDATA[immernoch_mmarcel1]]></dc:creator><pubDate>Sun, 29 Nov 2009 00:12:22 GMT</pubDate></item><item><title><![CDATA[Reply to UDP SOCKADDR_IN Problem&#x2F; Frage on Sun, 29 Nov 2009 10:59:59 GMT]]></title><description><![CDATA[<p>mmarcel1 schrieb:</p>
<blockquote>
<p>theta schrieb:</p>
<blockquote>
<p>Ich meinte nicht so. Du speicherst immer noch Pointer.</p>
<p>Zeigmal ein wenig mehr Code.</p>
<p>Ist das Teil einer Klasse? Was sind Member (der clients vector?)?</p>
<p>Simon</p>
</blockquote>
<p>Nein ich speicher jetzt nicht mehr als pointer, wie dem &quot;&amp;&quot; zu entnehmen ist. Ich habe nur das * vergessen zu löschen: vector&lt;SOCKADDR_IN*&gt; clients; was ich selbstverständlich im code getan habe.</p>
<p>Ich bin dankbar fuer weitere Vorschläge <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="🙂"
    /> Ich wüsste jetzt nicht genau was dir noch an code weiter helfen wuerde?!</p>
</blockquote>
<p>*g* ja, habe nur bis vector&lt;..&gt; gelesen.. <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="🙂"
    /></p>
<p>Zeig doch mehr code, da kann Dir besser geholfen werden.<br />
Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1814858</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1814858</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sun, 29 Nov 2009 10:59:59 GMT</pubDate></item><item><title><![CDATA[Reply to UDP SOCKADDR_IN Problem&#x2F; Frage on Mon, 30 Nov 2009 16:56:32 GMT]]></title><description><![CDATA[<p>Es geht sich hierbei um eine dll.</p>
<pre><code class="language-cpp">// Erster aufruf + Callback
void DLL_EXPORT ext_refresh() {
        bytes=recvfrom(s,buf,BUF_SIZE,0,(SOCKADDR*)&amp;remoteAddr,&amp;addrlen);
        buf[bytes]='\0';
        clients.push_back(&amp;remoteAddr);
        (*sp_on)(buf);
}
// Funktionsaufruf, um auf &quot;clients&quot; zuzugreifen
char DLL_EXPORT *ext_getpath(int client) {
    string strcheck;
    char *get1 = &quot;Hallo12&quot;;

    sprintf(buf,&quot;give&quot;);
    sendto (s,buf,strlen(buf),0,(SOCKADDR*)clients[0],addrlen);
    Sleep(10);
    bytes=recvfrom(s,buf,BUF_SIZE,0,(SOCKADDR*)&amp;remoteAddr, &amp;addrlen);
    buf[bytes] = '\0';
    strcpy(get1, buf);

    return get1;
}

vector&lt;SOCKADDR_IN*&gt; clients; // ist in der dll global deklariert.
</code></pre>
<p>rufe ich clients[0] direkt nach dem anlegen mit sendto auf, funktioniert es einwandfrei, nur nach dem callbkac und dem aufruf der zweiten funktion nicht mehr. Danke fuer eure Hilfe <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1815492</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1815492</guid><dc:creator><![CDATA[mmarcel1]]></dc:creator><pubDate>Mon, 30 Nov 2009 16:56:32 GMT</pubDate></item><item><title><![CDATA[Reply to UDP SOCKADDR_IN Problem&#x2F; Frage on Mon, 30 Nov 2009 20:17:33 GMT]]></title><description><![CDATA[<p>Sorry, ich habe keine Nerven mehr.<br />
Da ist sovieles Durcheinander....<br />
Simon</p>
<p>Edit:<br />
Das löscht ja Volkard wahrscheinlich wieder, aber zu meiner Verteidigung, es ist nicht böse gemeint.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1815617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1815617</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Mon, 30 Nov 2009 20:17:33 GMT</pubDate></item><item><title><![CDATA[Reply to UDP SOCKADDR_IN Problem&#x2F; Frage on Mon, 30 Nov 2009 20:24:10 GMT]]></title><description><![CDATA[<p>theta schrieb:</p>
<blockquote>
<p>Sorry, ich habe keine Nerven mehr.<br />
Da ist sovieles Durcheinander....<br />
Simon</p>
<p>Edit:<br />
Das löscht ja Volkard wahrscheinlich wieder, aber zu meiner Verteidigung, es ist nicht böse gemeint.</p>
</blockquote>
<p>genau das gleiche hatte ich mir auch gedacht xD<br />
aber dann mal doch wenigsten noch das, was mir als allererstes aufgefallen ist:</p>
<pre><code class="language-cpp">char* x = &quot;asd&quot;;
x[1] = 'S';
</code></pre>
<p>das hier ist verboten - damit ist insbesondere auch dein strcpy verkehrt.<br />
(literale dürfen in einem speicher mit nur lese-rechten gespeichert werden -&gt; schreiboperationen auf adressen in diesem bereich führen zu undefiniertem verhalten.)</p>
<p>die zeile <code>char* x = &quot;asd&quot;;</code> gibt imho schon eine warning, wegen des vergessenen cv-qualifiers... (google mal nach const correctness)</p>
<p>du brauchst also die länge...<br />
bzw. eine feste länge für einen puffer und verwendest dann std::string bzw std::vector&lt;char&gt; - je nach dem, was logischer erscheint...</p>
<p><code>Sleep(10);</code><br />
wieso tust du das?<br />
was ist, wenn eine übermittlung mal länger als 10ms dauert? (was ja gar nicht mal so unrealistisch ist...)</p>
<p>etc...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1815620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1815620</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 30 Nov 2009 20:24:10 GMT</pubDate></item></channel></rss>