<?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[Meine Funktion wird nicht richtig abgearbeitet, find Fehler den Fehler nich??!!]]></title><description><![CDATA[<p>Hallo,<br />
ich habe mich mal daran versucht mein kleines Server/Client Programm etwas weiter auszubauen. Folgendes ich habe im Servertool eine Listbox die auftretende Events dokumentieren soll. Dazu habe ich eine Funktion geschrieben die je nach Ereignis einen String in die Listbox postet. Ich lasse diese Funktion in einen extra Thread laufen.</p>
<p>Hier erst einmal meine Funktion:</p>
<pre><code class="language-cpp">///////////////////////////////////////////////////////////////////////////////
// # Server refresh

long done;
string event;
char szMessageBuffer[ 512 ];

void serverWork( HWND hList, int &amp;lIndex ) {

    FD_ZERO( &amp;fdset );
    FD_SET( server, &amp;fdset );

    for( int i = 0; i &lt; MAX_CLIENTS; i++ ) {

        if( client[ i ] != INVALID_SOCKET ) {

            FD_SET( client[ i ], &amp;fdset );
        }
    }

    done = select( 0, &amp;fdset, 0, 0, 0 );
    if( FD_ISSET( server, &amp;fdset ) ) {

        for( int i = 0; i &lt; MAX_CLIENTS; i++ ) {

            if( client[ i ] == INVALID_SOCKET ) {

                client[ i ] = accept( server, 0, 0 );
                InsertSysMessage( hList, lIndex, &quot;New client is connected&quot; );
                send( client[ i ], &quot;Welcome on board!&quot;, 17, 0 );
                for( int j = 0; j &lt; MAX_CLIENTS; j++ ) {

                    if( j == i ) {

                        continue;
                    }
                    if( client[ j ] != INVALID_SOCKET ) {

                        send( client[ j ], &quot;New user is connected!&quot;, 22, 0 );
                    }
                }
                break;
            }
        }
    }

    for( int i = 0; i &lt; MAX_CLIENTS; i++ ) {

        if( client[ i ] == INVALID_SOCKET ) {

            continue;
        }

        if( FD_ISSET( client[ i ], &amp;fdset ) ) {

            szMessageBuffer[ 0 ] = 0;
            done = recv( client[ i ], szMessageBuffer, sizeof( szMessageBuffer ), 0 );

            if( ( done == 0 ) || ( done == SOCKET_ERROR ) ) {

                closesocket( client[ i ] );
                client[ i ] = INVALID_SOCKET;
                InsertSysMessage( hList, lIndex, &quot;Client is disconnected!&quot; );
            }
            else {

                InsertSysMessage( hList, lIndex, &quot;Client sent a message&quot; );
                for( int j = 0; j &lt; MAX_CLIENTS; j++ ) {

                    if( j == i ) {

                        continue;
                    }
                    send( client[ j ], szMessageBuffer, strlen( szMessageBuffer ), 0 );
                    szMessageBuffer[ 0 ] = 0;
                }
            }
        }
    }
}
</code></pre>
<p>Und so verwende ich sie in der Appi:</p>
<pre><code class="language-cpp">DWORD WINAPI Thread_Connection( LPVOID pParam ) {

    while( !fexit ) {

        serverWork( hListEvent, lIndex );
    }

    SendMessage( hListEvent, LB_DELETESTRING, lIndex, 0 );
    lIndex--;
    return (DWORD) pParam;
}
</code></pre>
<p>Mein Problem ist jetzt folgendes:</p>
<p>- es wird dokumentiert, wenn sich ein Client verbindet<br />
- es wird dokumentiert, wenn ein Client disconnected<br />
aber,</p>
<p>- es wird nicht dokumentiert, wenn ein Client eine Nachricht schrieb<br />
- so wird diese vom Client gesandte Nachricht auch nicht zu allen anderen Clients<br />
geschickt<br />
- und es wird nicht an alle anderen Clients gepostet, wenn sich ein neuer Client verbindet<br />
hat</p>
<p>Wäre echt nett, wenn mir jemand Rat geben könnte wieso diese Dinge nicht abgearbeitet werden.</p>
<p>Gruß Tobi.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/180608/meine-funktion-wird-nicht-richtig-abgearbeitet-find-fehler-den-fehler-nich</link><generator>RSS for Node</generator><lastBuildDate>Wed, 08 Jul 2026 18:10:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/180608.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 04 May 2007 15:05:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Meine Funktion wird nicht richtig abgearbeitet, find Fehler den Fehler nich??!! on Fri, 04 May 2007 15:05:16 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe mich mal daran versucht mein kleines Server/Client Programm etwas weiter auszubauen. Folgendes ich habe im Servertool eine Listbox die auftretende Events dokumentieren soll. Dazu habe ich eine Funktion geschrieben die je nach Ereignis einen String in die Listbox postet. Ich lasse diese Funktion in einen extra Thread laufen.</p>
<p>Hier erst einmal meine Funktion:</p>
<pre><code class="language-cpp">///////////////////////////////////////////////////////////////////////////////
// # Server refresh

long done;
string event;
char szMessageBuffer[ 512 ];

void serverWork( HWND hList, int &amp;lIndex ) {

    FD_ZERO( &amp;fdset );
    FD_SET( server, &amp;fdset );

    for( int i = 0; i &lt; MAX_CLIENTS; i++ ) {

        if( client[ i ] != INVALID_SOCKET ) {

            FD_SET( client[ i ], &amp;fdset );
        }
    }

    done = select( 0, &amp;fdset, 0, 0, 0 );
    if( FD_ISSET( server, &amp;fdset ) ) {

        for( int i = 0; i &lt; MAX_CLIENTS; i++ ) {

            if( client[ i ] == INVALID_SOCKET ) {

                client[ i ] = accept( server, 0, 0 );
                InsertSysMessage( hList, lIndex, &quot;New client is connected&quot; );
                send( client[ i ], &quot;Welcome on board!&quot;, 17, 0 );
                for( int j = 0; j &lt; MAX_CLIENTS; j++ ) {

                    if( j == i ) {

                        continue;
                    }
                    if( client[ j ] != INVALID_SOCKET ) {

                        send( client[ j ], &quot;New user is connected!&quot;, 22, 0 );
                    }
                }
                break;
            }
        }
    }

    for( int i = 0; i &lt; MAX_CLIENTS; i++ ) {

        if( client[ i ] == INVALID_SOCKET ) {

            continue;
        }

        if( FD_ISSET( client[ i ], &amp;fdset ) ) {

            szMessageBuffer[ 0 ] = 0;
            done = recv( client[ i ], szMessageBuffer, sizeof( szMessageBuffer ), 0 );

            if( ( done == 0 ) || ( done == SOCKET_ERROR ) ) {

                closesocket( client[ i ] );
                client[ i ] = INVALID_SOCKET;
                InsertSysMessage( hList, lIndex, &quot;Client is disconnected!&quot; );
            }
            else {

                InsertSysMessage( hList, lIndex, &quot;Client sent a message&quot; );
                for( int j = 0; j &lt; MAX_CLIENTS; j++ ) {

                    if( j == i ) {

                        continue;
                    }
                    send( client[ j ], szMessageBuffer, strlen( szMessageBuffer ), 0 );
                    szMessageBuffer[ 0 ] = 0;
                }
            }
        }
    }
}
</code></pre>
<p>Und so verwende ich sie in der Appi:</p>
<pre><code class="language-cpp">DWORD WINAPI Thread_Connection( LPVOID pParam ) {

    while( !fexit ) {

        serverWork( hListEvent, lIndex );
    }

    SendMessage( hListEvent, LB_DELETESTRING, lIndex, 0 );
    lIndex--;
    return (DWORD) pParam;
}
</code></pre>
<p>Mein Problem ist jetzt folgendes:</p>
<p>- es wird dokumentiert, wenn sich ein Client verbindet<br />
- es wird dokumentiert, wenn ein Client disconnected<br />
aber,</p>
<p>- es wird nicht dokumentiert, wenn ein Client eine Nachricht schrieb<br />
- so wird diese vom Client gesandte Nachricht auch nicht zu allen anderen Clients<br />
geschickt<br />
- und es wird nicht an alle anderen Clients gepostet, wenn sich ein neuer Client verbindet<br />
hat</p>
<p>Wäre echt nett, wenn mir jemand Rat geben könnte wieso diese Dinge nicht abgearbeitet werden.</p>
<p>Gruß Tobi.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278861</guid><dc:creator><![CDATA[T0bi]]></dc:creator><pubDate>Fri, 04 May 2007 15:05:16 GMT</pubDate></item><item><title><![CDATA[Reply to Meine Funktion wird nicht richtig abgearbeitet, find Fehler den Fehler nich??!! on Sat, 05 May 2007 08:25:19 GMT]]></title><description><![CDATA[<p>help please!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279149</guid><dc:creator><![CDATA[T0bi]]></dc:creator><pubDate>Sat, 05 May 2007 08:25:19 GMT</pubDate></item><item><title><![CDATA[Reply to Meine Funktion wird nicht richtig abgearbeitet, find Fehler den Fehler nich??!! on Sat, 05 May 2007 10:00:29 GMT]]></title><description><![CDATA[<p>Hi Tübi!</p>
<p>- Du arbeitest offensichtlich mit MSVC; das Debugger-GUI ist das beste das ich kenne - warum debuggst Du nicht erstmal Deinen Server? Für einen Code im Enwicklungsstadium sind mir da auch erheblich zuwenige Testaussschriften drin!</p>
<p>- Der recv in Zeile 57 scheint ja nach Deiner Schilderung der entscheidende zu sein. Versuch's dort mal mit einem WSAGetLastError().</p>
<p>- Das FD_ISSET finde ich etwas seltsam; einal rufst Du's mit dem Server und einmal mit einem Deskriptor für den Client auf.</p>
<p>- Die Schleifensteuerung ist unkommentiert - tu was dagegen ! Für mich sieht das so aus als würde der Server nach dem ersten Client im der nächsten loop beim accept stecken bleiben. Aber ohne Kommentare werde ich da gewiss nicht tiefer einsteigen.</p>
<p>Grüsse</p>
<p>*this</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279186</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279186</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Sat, 05 May 2007 10:00:29 GMT</pubDate></item><item><title><![CDATA[Reply to Meine Funktion wird nicht richtig abgearbeitet, find Fehler den Fehler nich??!! on Sat, 05 May 2007 10:24:10 GMT]]></title><description><![CDATA[<p>hmm ok.... könntest du mir evtl. nen site empfehlen oder nen tutorial wo das mit dem Debuggen erklärt wird? ich hab da nämlich net so wirklich ahnung wie gemacht wir.</p>
<p>wäre das eine gute fehlerkontrolle?:</p>
<pre><code class="language-cpp">done = select( 0, &amp;fdset, 0, 0, 0 );
    if( ( done == 0 ) || ( done == SOCKET_ERROR ) ) {

        sprintf( szErrorBuffer, &quot;%d&quot;, WSAGetLastError() );
        MessageBox( 0, szErrorBuffer, &quot;Error&quot;, MB_OK );
        return;
    }
</code></pre>
<p>Gruß Tobi.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279194</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279194</guid><dc:creator><![CDATA[T0bi]]></dc:creator><pubDate>Sat, 05 May 2007 10:24:10 GMT</pubDate></item><item><title><![CDATA[Reply to Meine Funktion wird nicht richtig abgearbeitet, find Fehler den Fehler nich??!! on Sat, 05 May 2007 11:18:01 GMT]]></title><description><![CDATA[<p>Mir sind nicht wirklich Tutorials zu so etwas bekannt.<br />
Am besten du machst rechts neben dem code in MSVC einen Breakpoint( einen vors recv() und einen dannach) und schaust durch was so in den Variablen steht dann wirst du merken wo der Fehler ist.</p>
<p>MFG Pacino</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279216</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279216</guid><dc:creator><![CDATA[Pacino90]]></dc:creator><pubDate>Sat, 05 May 2007 11:18:01 GMT</pubDate></item><item><title><![CDATA[Reply to Meine Funktion wird nicht richtig abgearbeitet, find Fehler den Fehler nich??!! on Sat, 05 May 2007 11:37:56 GMT]]></title><description><![CDATA[<p>T0bi schrieb:</p>
<blockquote>
<p>hmm ok.... könntest du mir evtl. nen site empfehlen</p>
</blockquote>
<p>Einfach mal ausprobieren was dann so passiert:</p>
<p>Mit<br />
&lt;F9&gt; Toggle Breakpoint<br />
erstmal Breaks setzen/ausschalten<br />
zB. bei dem recv in Zeile 57.<br />
&lt;F5&gt; Start Debug<br />
&lt;F10&gt; Step Over<br />
&lt;F11&gt; Step Into<br />
&lt;Shift-F5&gt; Exit Debug<br />
Links unten solltest Du ein Fensterli mit lokalen Variablen sehen.</p>
<p>T0bi schrieb:</p>
<blockquote>
<p>wäre das eine gute fehlerkontrolle?:</p>
<pre><code class="language-cpp">done = select( 0, &amp;fdset, 0, 0, 0 );
    if( ( done == 0 ) || ( done == SOCKET_ERROR ) ) {

        sprintf( szErrorBuffer, &quot;%d&quot;, WSAGetLastError() );
        MessageBox( 0, szErrorBuffer, &quot;Error&quot;, MB_OK );
        return;
    }
</code></pre>
</blockquote>
<p>Na ja; das zeigt Dir eine Zahl an, die Du dann im MSDN nachschlagen musst.<br />
Eher so in etwa:</p>
<pre><code class="language-cpp">/*global*/ std::map&lt;int,std::string&gt; codeMap;

codeMap[WSAEINTR] = &quot;Interrupted function call&quot;;      // 10004
codeMap[WSAACCES] = &quot;Permission denied.&quot;;      // 10013
//
// .. und soweiter
//

int sockErr = WSAGetLastError();

std::string strMsg(&quot;&quot;);

if (::codeMap.find(sockErr) != codeMap.end())
    strMsg += &quot; =&gt; &quot;; 
    strMsg += codeMap[sockErr];
}

std::cerr &lt;&lt; &quot;Winsock Error #&quot; 
          &lt;&lt; sockErr
          &lt;&lt; strMsg
          &lt;&lt; std::endl;
</code></pre>
<p>Und das jetzt entwder UNICODE fähig machen</p>
<pre><code class="language-cpp">#ifdef _UNICODE
typedef std::wstring string;
typedef std::wostream ostream;  
//...
extern ostream&amp; cerr; // das irgendwo mit std::cerr oder std::wcerr versosrgen 
//...
#else // _MBCS,_SBCS
typedef std::string string;
//...
#endif
</code></pre>
<p>oder auf TCHAR* und &lt;cstdio&gt; umschreiben.</p>
<p>Grüsse</p>
<p>Gast++</p>
<p>P.S.: Die Arbeit rentiert sich, glaub mir!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279226</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Sat, 05 May 2007 11:37:56 GMT</pubDate></item><item><title><![CDATA[Reply to Meine Funktion wird nicht richtig abgearbeitet, find Fehler den Fehler nich??!! on Sat, 05 May 2007 11:36:58 GMT]]></title><description><![CDATA[<p>eins noch... ich arbeite mit BCB6</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279229</guid><dc:creator><![CDATA[T0bi]]></dc:creator><pubDate>Sat, 05 May 2007 11:36:58 GMT</pubDate></item><item><title><![CDATA[Reply to Meine Funktion wird nicht richtig abgearbeitet, find Fehler den Fehler nich??!! on Sat, 05 May 2007 11:53:15 GMT]]></title><description><![CDATA[<p>T0bi schrieb:</p>
<blockquote>
<p>eins noch... ich arbeite mit BCB6</p>
</blockquote>
<p>Dann sind die Tastenkürzel zum Debuggen wahrscheinlich nur anders -<br />
aber in der IDE kenn ich mich gar nicht aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279234</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Sat, 05 May 2007 11:53:15 GMT</pubDate></item></channel></rss>