<?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[Listen-Socket richtig in eine Schleife bauen]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich probiere gerade ein Bischen mit Sockets rum. Jetzt würde ich gerne wissen, wie ich den Server am Besten in eine Schleife einbaue. Der server soll Daten empfangen und verarbeiten, solange eine Verbindung besteht. Wenn keine Verbindung mehr besteht soll er wieder auf eine neue Verbindung warten.</p>
<p>Ich habe mir das so irgendwie gedacht:</p>
<pre><code>do
{
    socket = accept(...);

    do
    {
        recv(..., buffer, ....)
    }while (Verbindung steht)

}while (strcmp(buffer, &quot;quit&quot;) != 0)
</code></pre>
<p>Könnte man das so lassen, oder gibts da eine bessere ausgefeiltere Technik?<br />
Vor allem würde ich gern wissen, wie man untersucht, ob eine Verbindung besteht.<br />
Muss man den socket auf irgend ein ERROR o.ä. abfragen?</p>
<p>Wäre schön wenn mir jemand ein kleinen Codeschnipsel posten könnte, welcher das ganze erledigt <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>Danke, Askyer!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/105989/listen-socket-richtig-in-eine-schleife-bauen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 19 Jun 2026 10:51:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/105989.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 05 Apr 2005 07:32:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Listen-Socket richtig in eine Schleife bauen on Tue, 05 Apr 2005 07:32:50 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich probiere gerade ein Bischen mit Sockets rum. Jetzt würde ich gerne wissen, wie ich den Server am Besten in eine Schleife einbaue. Der server soll Daten empfangen und verarbeiten, solange eine Verbindung besteht. Wenn keine Verbindung mehr besteht soll er wieder auf eine neue Verbindung warten.</p>
<p>Ich habe mir das so irgendwie gedacht:</p>
<pre><code>do
{
    socket = accept(...);

    do
    {
        recv(..., buffer, ....)
    }while (Verbindung steht)

}while (strcmp(buffer, &quot;quit&quot;) != 0)
</code></pre>
<p>Könnte man das so lassen, oder gibts da eine bessere ausgefeiltere Technik?<br />
Vor allem würde ich gern wissen, wie man untersucht, ob eine Verbindung besteht.<br />
Muss man den socket auf irgend ein ERROR o.ä. abfragen?</p>
<p>Wäre schön wenn mir jemand ein kleinen Codeschnipsel posten könnte, welcher das ganze erledigt <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>Danke, Askyer!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/759996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/759996</guid><dc:creator><![CDATA[Askyer_]]></dc:creator><pubDate>Tue, 05 Apr 2005 07:32:50 GMT</pubDate></item><item><title><![CDATA[Reply to Listen-Socket richtig in eine Schleife bauen on Tue, 05 Apr 2005 07:51:54 GMT]]></title><description><![CDATA[<p>hier findest du jede menge schnipsel<br />
<a href="http://www.c-worker.ch/" rel="nofollow">http://www.c-worker.ch/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/760012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/760012</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Tue, 05 Apr 2005 07:51:54 GMT</pubDate></item><item><title><![CDATA[Reply to Listen-Socket richtig in eine Schleife bauen on Tue, 05 Apr 2005 08:15:28 GMT]]></title><description><![CDATA[<p>Askyer_ schrieb:</p>
<blockquote>
<p>Könnte man das so lassen, oder gibts da eine bessere ausgefeiltere Technik?</p>
</blockquote>
<p>könnte so gehen. dein progrämmchen kann aber nicht während eine verbindung besteht eine weitere bearbeiten. sowas kriegste z.b. mit mehreren threads hin.</p>
<pre><code>while (1)
{
   accepted_sock = accept (...);
   neuer_empfangsthread (accepted_sock, ...);
}
</code></pre>
<p>die threads müssen sich selbst beenden, wenn die verbindung geschlossen wurde.</p>
<p>Askyer_ schrieb:</p>
<blockquote>
<p>Vor allem würde ich gern wissen, wie man untersucht, ob eine Verbindung besteht. Muss man den socket auf irgend ein ERROR o.ä. abfragen?</p>
</blockquote>
<p>man kann u.a. am rückgabewert von 'recv' oder 'send' erkennen ob die verbindung noch da ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/760032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/760032</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Tue, 05 Apr 2005 08:15:28 GMT</pubDate></item><item><title><![CDATA[Reply to Listen-Socket richtig in eine Schleife bauen on Tue, 05 Apr 2005 08:33:29 GMT]]></title><description><![CDATA[<p>Danke für euere Antworten.</p>
<p>Ich habe es mal Probiert, aber ein kleines Problem dabei.</p>
<p>Folgender Code funktioniert:</p>
<pre><code>do
{

	connectedSocket = accept(acceptSocket, NULL, NULL);

	while (recv(connectedSocket, buffer, 256, 0) != 0)
	{
		MessageBox(NULL, buffer, &quot;Test&quot;, MB_OK);
		ZeroMemory(buffer, 256);
	};
	closesocket(connectedSocket);
}
while (strcmp(buffer, &quot;QUIT&quot;) != 0);
</code></pre>
<p>Ich habe mal zum Test TCPView von Sysinternals laufen.</p>
<p>Der offene Port steht auch drin, wenn ich mich jedoch verbinde, dann die Verbindung trenne, und wieder verbinde..... etc. Dann hab ich mehrmals folgende Einträge in TCPView:<br />
Process: [System Process]:0<br />
Protocol: TCP<br />
Local Address: notebook:[irgendeinport]<br />
Remote Address: localhost:12345<br />
State: TIME_WAIT</p>
<p>Das ganze bleibt ca. jeweils 1-2 Minuten drin, bevor der eintrag verschwindet, und wieder nurnoch</p>
<p>Process: Server.exe:1380<br />
Protocol: TCP<br />
Local Address: notebook:12345<br />
Remote Address: notebook:0<br />
State: LISTENIG</p>
<p>drinsteht.</p>
<p>Ist das normal, oder liegt das an einer unsauberen Programmierung von mir?</p>
<p>MfG, Askyer</p>
]]></description><link>https://www.c-plusplus.net/forum/post/760047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/760047</guid><dc:creator><![CDATA[Askyer_]]></dc:creator><pubDate>Tue, 05 Apr 2005 08:33:29 GMT</pubDate></item><item><title><![CDATA[Reply to Listen-Socket richtig in eine Schleife bauen on Tue, 05 Apr 2005 09:02:45 GMT]]></title><description><![CDATA[<p>Askyer_ schrieb:</p>
<blockquote>
<p>Ist das normal, oder liegt das an einer unsauberen Programmierung von mir?</p>
</blockquote>
<p>wohl eher am unsauberen beenden der verbindung <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="😉"
    /><br />
im 'time-wait' state wartet der socket auf das 'fin' von der gegenstelle, das offenbar nie ankommt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/760068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/760068</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Tue, 05 Apr 2005 09:02:45 GMT</pubDate></item></channel></rss>