<?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[Problem mit Sockets]]></title><description><![CDATA[<p>Hallo</p>
<p>ich habe ein kleine Problem und hoffe das mir hier jemand den richtigen Weg zeigen kann.</p>
<p>Ich möchte ein Programm schreiben das<br />
1. UDP Nachrichten empfangen kann und<br />
2. Gleichzeitig auch Nachrichten verschicken kann.</p>
<p>Ich habe einen Thread erstellt in dem permanent der Befehl rcvfrom ausgeführt wird. Zustätzlich habe ich im Hauptprogramm eine ewige while Schleife welche alle 5 Sekunden eine Nachricht ins Netzwerk schicken soll.</p>
<p>Mein Problem sind die Sockets.</p>
<p>Ich habe leider kein Tutorial/keine Beschreibung gefunden das dieses Thema so behandelt.</p>
<p>Ich habe bisher versucht mit einem oder zwei Sockets zu arbeiten. Bei zwei Sockets stellt sich die Schwierigkeit das ich nicht auf den selben Port binden kann.<br />
Bei einem Socket muss ich irgendwie zwischendurch die Adressierung anpassen.<br />
Also von</p>
<pre><code class="language-cpp">addr.sin_addr.s_addr=ADDR_ANY;
</code></pre>
<p>auf z.B.</p>
<pre><code class="language-cpp">addr.sin_addr.s_addr=inet_addr(&quot;127.0.0.1&quot;);
</code></pre>
<p>ändern.</p>
<p>Dies würde jedoch Probleme mit meinem Thread erzeugen.</p>
<p>Wie löst man dieses Problem normalerweise?</p>
<p>Danke</p>
<p>Sledge77</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/206560/problem-mit-sockets</link><generator>RSS for Node</generator><lastBuildDate>Sat, 10 Oct 2026 14:45:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/206560.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 26 Feb 2008 13:09:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Sockets on Tue, 26 Feb 2008 13:09:49 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>ich habe ein kleine Problem und hoffe das mir hier jemand den richtigen Weg zeigen kann.</p>
<p>Ich möchte ein Programm schreiben das<br />
1. UDP Nachrichten empfangen kann und<br />
2. Gleichzeitig auch Nachrichten verschicken kann.</p>
<p>Ich habe einen Thread erstellt in dem permanent der Befehl rcvfrom ausgeführt wird. Zustätzlich habe ich im Hauptprogramm eine ewige while Schleife welche alle 5 Sekunden eine Nachricht ins Netzwerk schicken soll.</p>
<p>Mein Problem sind die Sockets.</p>
<p>Ich habe leider kein Tutorial/keine Beschreibung gefunden das dieses Thema so behandelt.</p>
<p>Ich habe bisher versucht mit einem oder zwei Sockets zu arbeiten. Bei zwei Sockets stellt sich die Schwierigkeit das ich nicht auf den selben Port binden kann.<br />
Bei einem Socket muss ich irgendwie zwischendurch die Adressierung anpassen.<br />
Also von</p>
<pre><code class="language-cpp">addr.sin_addr.s_addr=ADDR_ANY;
</code></pre>
<p>auf z.B.</p>
<pre><code class="language-cpp">addr.sin_addr.s_addr=inet_addr(&quot;127.0.0.1&quot;);
</code></pre>
<p>ändern.</p>
<p>Dies würde jedoch Probleme mit meinem Thread erzeugen.</p>
<p>Wie löst man dieses Problem normalerweise?</p>
<p>Danke</p>
<p>Sledge77</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1463187</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1463187</guid><dc:creator><![CDATA[Sledge77]]></dc:creator><pubDate>Tue, 26 Feb 2008 13:09:49 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Sockets on Tue, 26 Feb 2008 13:47:32 GMT]]></title><description><![CDATA[<blockquote>
<pre><code class="language-cpp">addr.sin_addr.s_addr=ADDR_ANY;
</code></pre>
<p>auf z.B.</p>
<pre><code class="language-cpp">addr.sin_addr.s_addr=inet_addr(&quot;127.0.0.1&quot;);
</code></pre>
<p>Dies würde jedoch Probleme mit meinem Thread erzeugen.</p>
</blockquote>
<p>Was für ein Problem??<br />
Ein socket kann empfangen und senden. Du benötigst nicht zwei Sockets.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1463229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1463229</guid><dc:creator><![CDATA[simon.gysi]]></dc:creator><pubDate>Tue, 26 Feb 2008 13:47:32 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Sockets on Tue, 26 Feb 2008 13:58:02 GMT]]></title><description><![CDATA[<p>Bitte Entschuldige. Ich bin neu in der Materie.</p>
<p>Ich habe also einen Socket. In meinem Thread sage ich ihm mit o.g. Code das er auf Nachrichten von jeder IP Addresse lauschen soll. Beim senden gebe ich ihm eine IP Addresse. Ich habe hier die Angst das es Überschneidungen gibt. Also parallel im Thread und im Hauptprogramm versucht wird zu empfangen und zu senden. Deswegen suche ich nach Beispielen o.ä.</p>
<p>Ich habe gerade im Internet noch geforscht. Dort spricht man auch von Non-Blocking Sockets. Möglicherweise muss ich hier einfach darauf umsteigen. Dann könnte ich mir den extra Thread zum empfangen sparen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1463241</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1463241</guid><dc:creator><![CDATA[Sledge77]]></dc:creator><pubDate>Tue, 26 Feb 2008 13:58:02 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Sockets on Tue, 26 Feb 2008 14:13:53 GMT]]></title><description><![CDATA[<p>Sledge77 schrieb:</p>
<blockquote>
<p>Ich habe also einen Socket. In meinem Thread sage ich ihm mit o.g. Code das er auf Nachrichten von jeder IP Addresse lauschen soll. Beim senden gebe ich ihm eine IP Addresse. Ich habe hier die Angst das es Überschneidungen gibt. Also parallel im Thread und im Hauptprogramm versucht wird zu empfangen und zu senden. Deswegen suche ich nach Beispielen o.ä.</p>
</blockquote>
<p>Das sollte eigentlich kein Problem sein. Das Betriebssystem kümmert sich darum. Außerdem ist IP ja gerade ein Multiplex-Protokoll also genau darauf ausgelegt gleichzeitig mit vielen zu kommunizieren.</p>
<p>Sledge77 schrieb:</p>
<blockquote>
<p>Ich habe gerade im Internet noch geforscht. Dort spricht man auch von Non-Blocking Sockets. Möglicherweise muss ich hier einfach darauf umsteigen. Dann könnte ich mir den extra Thread zum empfangen sparen.</p>
</blockquote>
<p>Du könntest mit der Funktion <em>select</em> schauen, ob du was empfängtst und darauf reagieren. <em>select</em> bietet dir auch ein Timeout an. Da brauchst du nicht die Sockets auf Non-Blocking setzen. Das ist meistens nicht das, was man will. Blockierende Aufrufe sind immer nett.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1463260</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1463260</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 26 Feb 2008 14:13:53 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Sockets on Tue, 26 Feb 2008 15:08:16 GMT]]></title><description><![CDATA[<p>Reden wir dann von einem Thread der gleichzeitig sendet und empfängt?</p>
<p>Mein Plan würde dann folgendermaßen aussehen.<br />
Ich lege zwei queues an. Eine mit Nachrichten die ich empfangen habe und eine die zu sendende Nachrichte enthält. Der Thread schaut dann permanent in die Sende queue und sendet bei bedarf die Nachrichten und danach wird über diesen select Befehl geprüft ob Nachrichten angekommen sind.</p>
<p>Ist das so umsetzbar?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1463339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1463339</guid><dc:creator><![CDATA[Sledge77]]></dc:creator><pubDate>Tue, 26 Feb 2008 15:08:16 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Sockets on Tue, 26 Feb 2008 15:15:54 GMT]]></title><description><![CDATA[<p>Sledge77 schrieb:</p>
<blockquote>
<p>Reden wir dann von einem Thread der gleichzeitig sendet und empfängt?</p>
</blockquote>
<p>Ja</p>
<p>Sledge77 schrieb:</p>
<blockquote>
<p>Mein Plan würde dann folgendermaßen aussehen.<br />
Ich lege zwei queues an. Eine mit Nachrichten die ich empfangen habe und eine die zu sendende Nachrichte enthält. Der Thread schaut dann permanent in die Sende queue und sendet bei bedarf die Nachrichten und danach wird über diesen select Befehl geprüft ob Nachrichten angekommen sind.</p>
<p>Ist das so umsetzbar?</p>
</blockquote>
<p>Nein. Bei UDP kann der Sender nicht direkt festellen, ob ein UDP-Paket angekommen ist. Schau dir mal den <em>select</em>-Befehlt an, vielleicht weist du dann, was ich meine.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1463352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1463352</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 26 Feb 2008 15:15:54 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Sockets on Tue, 26 Feb 2008 16:59:37 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>Ich habe mir mal ein Tutorial zu select() durchgelesen. Wenn ich es richtig verstehe geht es bei dem select() Befehl um das empfangen von Nachrichten von mehreren Clients und dann reagieren in dem ich Nachrichten an diese zurückschicke.</p>
<p>Der select() Befehl würde meine Anwendung auch blockieren bis das FD_SET sich ändert. Oder? Dann könnte ich prüfen wer noch im Set steht und dann diese Clients behandeln.</p>
<p>Wenn ich aber dann parallel eine Nachricht schon verschicken will. Wie würde ich das machen?</p>
<p>Möglicherweise habe ich hier auch nur ein grundsätzliches Verständniss Problem.</p>
<p>Um Nachrichten von einem bestimmten Port zu erhalten muss ich einen Socket erstellen und diesen auf den Port und ADDR_ANY binden. Nun kann ich mit rcvfrom() abwarten bis hier eine Nachricht eintrifft.</p>
<p>Parallel möchte ich auf dem selben Port Nachrichten mit sendto() verschicken.</p>
<p>Hier kommt nun mein Problem. rcvfrom() blockt meine Anwendung. select() würde meine Anwendung auch blocken (soweit ich verstanden habe).</p>
<p>Also dachte ich mir ich lege das rcvfrom() in einen extra Thread. Dort kann er blocken so lange er will. Ich kann dann in main() Nachrichten schicken. Aber hier hatte ich das Problem mit dem socket (parallele Verwendung zum senden und empfangen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1463439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1463439</guid><dc:creator><![CDATA[Sledge77]]></dc:creator><pubDate>Tue, 26 Feb 2008 16:59:37 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Sockets on Tue, 26 Feb 2008 19:57:52 GMT]]></title><description><![CDATA[<p>Sledge77 schrieb:</p>
<blockquote>
<p>Der select() Befehl würde meine Anwendung auch blockieren bis das FD_SET sich ändert. Oder? Dann könnte ich prüfen wer noch im Set steht und dann diese Clients behandeln.</p>
<p>Wenn ich aber dann parallel eine Nachricht schon verschicken will. Wie würde ich das machen?</p>
<p>[...]<br />
Hier kommt nun mein Problem. rcvfrom() blockt meine Anwendung. select() würde meine Anwendung auch blocken (soweit ich verstanden habe).</p>
</blockquote>
<p>Du willst doch alle paar Sekunden ein Paket versenden. Select bietet dir ein Timeout. d.h. es kehrt nach einer bestimmten Zeit auf Jeden fall zurück, wenn du das willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1463552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1463552</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 26 Feb 2008 19:57:52 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Sockets on Wed, 27 Feb 2008 06:25:06 GMT]]></title><description><![CDATA[<p>Ich habe meinen denk Fehler gefunden.<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Mein erster Ansatz war schon Ok. Aber ich habe bei den Parametern zu sendto to recvfrom etwas übersehen. Ich nutze nun einen Socket in einem Thread und in meinem Hauptprogramm. Der Socket ist für eingehenede Nachrichten an meeinen Port und an Addr_Any gebunden.</p>
<p>Mein Fehler war das ich dachte das auch für ausgehende Nachrichten jedesmal ein bind duchgeführt werden muss. Stattdessen übergibt man in einem Parameter die Zieladresse und den Port.</p>
<p>Sorry.<br />
Aber trotzdem danke für eure hilfe.</p>
<p>Sledge77</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1463733</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1463733</guid><dc:creator><![CDATA[Sledge77]]></dc:creator><pubDate>Wed, 27 Feb 2008 06:25:06 GMT</pubDate></item></channel></rss>