<?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[CAsyncSocket Problem]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich benutze für eine Socketverbindung die MFC Klasse CAsyncSocket.<br />
Das Problem ist das jeweils nur <strong>ein</strong> connected sein darf.</p>
<p>Kommt aber während einer connection ein zweite Anfrage von einem Client<br />
schmiert mir die Server Anwendung ab :(.</p>
<p>Ich vermute den Fehler in meiner OnSocketAccept Funktion.<br />
Leider weiss ich nicht wie ich den zweiten Client abweisen kann<br />
ohne das der andere verbundene Client in mitleidenschaft gezogen wird.</p>
<p>Hat einer von euch Profs eine Idee wie das lösen kann?</p>
<pre><code>void CSesamServerDlg::OnSocketAccept( WPARAM wParam, LPARAM lParam )
{
    // Accept connection only if no other client is connected	
   if ( !this-&gt;m_bClientIsConnected )
   {
       this-&gt;m_bClientIsConnected = true;

       if ( m_cSocket.Accept(m_cSocketConnected) != 0 )
      {
         this-&gt;m_bClientIsConnected = true;
      }
   }
   else
   {
       // Hier muss denke ich noch was bestimmtes eingebaut werden ?!?

       this-&gt;WriteLogFile(&quot;Incoming request denied. Server is occupied&quot;);
   }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/79236/casyncsocket-problem</link><generator>RSS for Node</generator><lastBuildDate>Sun, 19 Apr 2026 07:02:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/79236.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 09 Jul 2004 07:00:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to CAsyncSocket Problem on Fri, 09 Jul 2004 07:00:46 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich benutze für eine Socketverbindung die MFC Klasse CAsyncSocket.<br />
Das Problem ist das jeweils nur <strong>ein</strong> connected sein darf.</p>
<p>Kommt aber während einer connection ein zweite Anfrage von einem Client<br />
schmiert mir die Server Anwendung ab :(.</p>
<p>Ich vermute den Fehler in meiner OnSocketAccept Funktion.<br />
Leider weiss ich nicht wie ich den zweiten Client abweisen kann<br />
ohne das der andere verbundene Client in mitleidenschaft gezogen wird.</p>
<p>Hat einer von euch Profs eine Idee wie das lösen kann?</p>
<pre><code>void CSesamServerDlg::OnSocketAccept( WPARAM wParam, LPARAM lParam )
{
    // Accept connection only if no other client is connected	
   if ( !this-&gt;m_bClientIsConnected )
   {
       this-&gt;m_bClientIsConnected = true;

       if ( m_cSocket.Accept(m_cSocketConnected) != 0 )
      {
         this-&gt;m_bClientIsConnected = true;
      }
   }
   else
   {
       // Hier muss denke ich noch was bestimmtes eingebaut werden ?!?

       this-&gt;WriteLogFile(&quot;Incoming request denied. Server is occupied&quot;);
   }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/556542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/556542</guid><dc:creator><![CDATA[BAB]]></dc:creator><pubDate>Fri, 09 Jul 2004 07:00:46 GMT</pubDate></item><item><title><![CDATA[Reply to CAsyncSocket Problem on Fri, 09 Jul 2004 11:05:37 GMT]]></title><description><![CDATA[<p>Versuchs mal obs funtkioniert wenn du den Listen Socket nach dem Accept schließt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/556737</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/556737</guid><dc:creator><![CDATA[newvet]]></dc:creator><pubDate>Fri, 09 Jul 2004 11:05:37 GMT</pubDate></item><item><title><![CDATA[Reply to CAsyncSocket Problem on Fri, 09 Jul 2004 11:16:18 GMT]]></title><description><![CDATA[<p>Wie wäre es wenn du für jeden Clienten einen neuen CAsyncSocket kreieren würdest?</p>
<p>In der MSDN ist ein Sample davon...</p>
<p>Ciao</p>
]]></description><link>https://www.c-plusplus.net/forum/post/556748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/556748</guid><dc:creator><![CDATA[Squeel]]></dc:creator><pubDate>Fri, 09 Jul 2004 11:16:18 GMT</pubDate></item><item><title><![CDATA[Reply to CAsyncSocket Problem on Fri, 09 Jul 2004 15:37:18 GMT]]></title><description><![CDATA[<p>Hi,<br />
Versuch mal folgendes.</p>
<p>1. Wenn du einer Socket-Klasse mit App Wizard erstellst, solltest du sagen, dass du vom CAsyncSocket ableitest. Nicht manuell erstellen.<br />
2. Dann mit &lt;Str&gt;+&lt;w&gt; kannst du denn Klassen Assistenten aufrufen<br />
Hier gehst du auf Member Funktionen und wählst alle On... Funktionen die du brauchst (MSDN: &quot;Overridable Notification Functions&quot;).<br />
Du brauchst z.b.: OnAccept OnClose und evt. OnConnect, ich hatte alle ausser OnOutOfBandData überschrieben. (War schon lange her) einfach markieren und auf &quot;Hinzufügen&quot; gehen. Jetzt hast du sie in Header und Cpp files.<br />
3. Jetzt gehst du zu OnAccept(). Wichtig ist, dass du den &quot;Eltern&quot; Aufruf an der ersten Stelle lässt. Also so was wie CAsyncSocket::OnAccept(); solte als erstes stehen.<br />
4. Erstelle die in der Header z.b. sowas:</p>
<pre><code class="language-cpp">#define MAX_CLIENTS 1
CAsyncSocket* m_pClientSocket[MAX_CLIENTS];
// Dann kannst du noch ein Array gebrauchen, z.b.: 
bool m_bConnected[MAX_CLIENTS];
</code></pre>
<p>Irgendwo in der cpp muss du noch new machen oder halt auf dem Stack ClientSockets erzeugen.<br />
5. In deiner OnAccept muss Du nachdem CAsyncSocket::OnAccept(nErrorCode) Aufruf nach den Fehlern prüfen und wenn alles OK war, das hier machen (Pseudocode):</p>
<pre><code class="language-cpp">for (int i = 0; i &lt; MAX_CLIENTS; i++ )
{
    if (m_bConnected[i] == false) {
        Accept(*m_pClientSocket[i]);
        // Wenn connected, m_bConnected[i] auf true setzten
    }
    // evt. wenn alle schon connected sind Exception werfen
}
</code></pre>
<p>Jetzt kannst du über m_pClientSocket[i] die Daten hin und her schicken und wenn du mit ihm fertig bist, muss du noch m_pClientSocket[i]-&gt;Detach() und m_pClientSocket[i]-&gt;Close() machen, dann ist dein Client Socket wieder frei und du kannst ihn bei der nächsten Anfrage wieder benutzen.</p>
<p>Wenn es dir nicht weiter hilft geh auf <a href="http://programmierer-board.de" rel="nofollow">programmierer-board.de</a> und suche nach &quot;CAsyncSocket&quot;, Autor muss &quot;jdot&quot; sein, da gibt es ordentlich Zeug dazu.</p>
<p>Versuche das hier erst mal. Und viel Spaß! <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/556981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/556981</guid><dc:creator><![CDATA[lazydot]]></dc:creator><pubDate>Fri, 09 Jul 2004 15:37:18 GMT</pubDate></item></channel></rss>