<?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[C++ Socket Server &#x2F; Client]]></title><description><![CDATA[<p>Moin!</p>
<p>Ich habe folgende Programme (siehe unten) geschrieben.<br />
Wie muss ich den Server bzw. den Client umschreiben, dass der Server alle Nachrichten an alle Clienten weiterleitet?<br />
Außerdem soll der Server alle Aktionen (Nachrichten, Clientenadressen etc) speichern (auf die Festplatte).</p>
<p>Die Clienten sollen die Nachrichten empfangen und senden können? (C++ 11 Thread?).</p>
<p>Danke</p>
<p>Server</p>
<pre><code>//#pragma comment( lib,&quot;ws2_32.lib&quot; )
#include &lt;windows.h&gt;

#include &lt;winsock2.h&gt; // bei manchan compilern muss man nur windows.h includieren (zB VC++)

#include &lt;stdio.h&gt;

#define MAX_CLIENTS 10

int startWinsock(void) {
    WSADATA wsa;
    return WSAStartup(MAKEWORD(2,0),&amp;wsa);
    }

int main() {
    long rc;
    SOCKET acceptSocket;
    //SOCKET connectedSocket;
    SOCKADDR_IN addr;
    char buf[256];
    char buf2[300];
    // zusätzliche Variabeln
    FD_SET fdSet;
    SOCKET clients[MAX_CLIENTS];
    int i;

    // Winsock starten
    rc=startWinsock();
    if(rc!=0) {
        printf(&quot;Fehler: startWinsock, fehler code: %ld\n&quot;,rc);
        return 1;
    } else {
        printf(&quot;Winsock gestartet!\n&quot;);
    }

    // Socket erstellen
    acceptSocket=socket(AF_INET,SOCK_STREAM,0);
    if(acceptSocket==INVALID_SOCKET) {
        printf(&quot;Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n&quot;,WSAGetLastError());
        return 1;
    } else {
        printf(&quot;Socket erstellt!\n&quot;);
    }

    // Socket binden
    memset(&amp;addr,0,sizeof(SOCKADDR_IN));
    addr.sin_family=AF_INET;
    addr.sin_port=htons(12345);
    addr.sin_addr.s_addr=INADDR_ANY; // gewisse compiler brauchen hier ADDR_ANY
    rc=bind(acceptSocket,(SOCKADDR*)&amp;addr,sizeof(SOCKADDR_IN));
    if(rc==SOCKET_ERROR) {
        printf(&quot;Fehler: bind, fehler code: %d\n&quot;,WSAGetLastError());
        return 1;
    } else {
        printf(&quot;Socket an port 12345 gebunden\n&quot;);
    }

    // In den listen Modus
    rc=listen(acceptSocket,10);
    if(rc==SOCKET_ERROR) {
        printf(&quot;Fehler: listen, fehler code: %d\n&quot;,WSAGetLastError());
        return 1;
    } else {
        printf(&quot;acceptSocket ist im listen Modus....\n&quot;);
    }

    for(i=0;i&lt;MAX_CLIENTS;i++) {
        clients[i]=INVALID_SOCKET;
    }

    while(1) {
        FD_ZERO(&amp;fdSet); // Inhalt leeren
        FD_SET(acceptSocket,&amp;fdSet); // Den Socket der verbindungen annimmt hinzufügen

        // alle gültigen client sockets hinzufügen (nur die die nicht INVALID_SOCKET sind)
        for(i=0;i&lt;MAX_CLIENTS;i++) {
            if(clients[i]!=INVALID_SOCKET) {
                FD_SET(clients[i],&amp;fdSet);
            }
        }

        rc=select(0,&amp;fdSet,NULL,NULL,NULL);
        // nicht vergessen den ersten parameter bei anderen betriebssystem anzugeben
        if(rc==SOCKET_ERROR) {
            printf(&quot;Fehler: select, fehler code: %i\n&quot;,WSAGetLastError());
            return 1;
        }

        // acceptSocket is im fd_set? =&gt; verbindung annehmen (sofern es platz hat)
        if(FD_ISSET(acceptSocket,&amp;fdSet)) {
            // einen freien platz für den neuen client suchen, und die verbingung annehmen
            for(i=0;i&lt;MAX_CLIENTS;i++) {
                if(clients[i]==INVALID_SOCKET) {
                    clients[i]=accept(acceptSocket,NULL,NULL);
                    printf(&quot;Neuen Client angenommen (%d)\n&quot;,i);
                    break;
                }
            }
        }
        // prüfen wlecher client sockets im fd_set sind
        for(i=0;i&lt;MAX_CLIENTS;i++) {
            if(clients[i]==INVALID_SOCKET) {
                continue; // ungültiger socket, d.h. kein verbunder client an dieser position im array
            }
            if(FD_ISSET(clients[i],&amp;fdSet)) {
                rc=recv(clients[i],buf,256,0);
                // prüfen ob die verbindung geschlossen wurde oder ein fehler auftrat
                if(rc==0 || rc==SOCKET_ERROR) {
                    printf(&quot;Client %d hat die Verbindung geschlossen\n&quot;,i);
                    closesocket(clients[i]); // socket schliessen
                    clients[i]=INVALID_SOCKET; // seinen platz wieder freigeben
                } else {
                    buf[rc]='\0';
                    // daten ausgeben und eine antwort senden
                    printf(&quot;Client %d hat folgendes gesandt: %s\n&quot;,i,buf);
                    // antwort senden
                    sprintf(buf2,&quot;Du mich auch %s\n&quot;,buf);
                    send(clients[i],buf2,(int)strlen(buf2),0);
                }
            }
        }
    }
}
</code></pre>
<p>Client</p>
<pre><code>#include &lt;windows.h&gt;
#include &lt;winsock2.h&gt;
#include &lt;stdio.h&gt;

//Prototypen
int startWinsock(void);

int main()
{
  long rc;
  SOCKET s;
  SOCKADDR_IN addr;
  char buf[256];

  // Winsock starten
  rc=startWinsock();
  if(rc!=0)
  {
    printf(&quot;Fehler: startWinsock, fehler code: %d\n&quot;,rc);
    return 1;
  }
  else
  {
    printf(&quot;Winsock gestartet!\n&quot;);
  }

  // Socket erstellen
  s=socket(AF_INET,SOCK_STREAM,0);
  if(s==INVALID_SOCKET)
  {
    printf(&quot;Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n&quot;,WSAGetLastError());
    return 1;
  }
  else
  {
    printf(&quot;Socket erstellt!\n&quot;);
  }

  // Verbinden
  memset(&amp;addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten
  addr.sin_family=AF_INET;
  addr.sin_port=htons(12345); // wir verwenden mal port 12345
  addr.sin_addr.s_addr=inet_addr(&quot;127.0.0.1&quot;); // zielrechner ist unser eigener

  rc=connect(s,(SOCKADDR*)&amp;addr,sizeof(SOCKADDR));
  if(rc==SOCKET_ERROR)
  {
    printf(&quot;Fehler: connect gescheitert, fehler code: %d\n&quot;,WSAGetLastError());
    return 1;
  }
  else
  {
    printf(&quot;Verbunden mit 127.0.0.1..\n&quot;);
  }

  // Daten austauschen
  while(rc!=SOCKET_ERROR)
  {
    printf(&quot;\nZeichenfolge eingeben [max 256]: &quot;);
    gets(buf);
    send(s,buf,strlen(buf),0);
    rc=recv(s,buf,256,0);
    if(rc==0)
    {
      printf(&quot;Server hat die Verbindung getrennt..\n&quot;);
      break;
    }
    if(rc==SOCKET_ERROR)
    {
      printf(&quot;Fehler: recv, fehler code: %d\n&quot;,WSAGetLastError());
      break;
    }
    buf[rc]='\0';
    printf(&quot;\nServer antwortet: %s\n&quot;,buf);
  }
  closesocket(s);
  WSACleanup();
  return 0;
}

int startWinsock(void)
{
  WSADATA wsa;
  return WSAStartup(MAKEWORD(2,0),&amp;wsa);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/338700/c-socket-server-client</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 07:01:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/338700.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 04 Jul 2016 06:33:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C++ Socket Server &#x2F; Client on Mon, 04 Jul 2016 06:33:54 GMT]]></title><description><![CDATA[<p>Moin!</p>
<p>Ich habe folgende Programme (siehe unten) geschrieben.<br />
Wie muss ich den Server bzw. den Client umschreiben, dass der Server alle Nachrichten an alle Clienten weiterleitet?<br />
Außerdem soll der Server alle Aktionen (Nachrichten, Clientenadressen etc) speichern (auf die Festplatte).</p>
<p>Die Clienten sollen die Nachrichten empfangen und senden können? (C++ 11 Thread?).</p>
<p>Danke</p>
<p>Server</p>
<pre><code>//#pragma comment( lib,&quot;ws2_32.lib&quot; )
#include &lt;windows.h&gt;

#include &lt;winsock2.h&gt; // bei manchan compilern muss man nur windows.h includieren (zB VC++)

#include &lt;stdio.h&gt;

#define MAX_CLIENTS 10

int startWinsock(void) {
    WSADATA wsa;
    return WSAStartup(MAKEWORD(2,0),&amp;wsa);
    }

int main() {
    long rc;
    SOCKET acceptSocket;
    //SOCKET connectedSocket;
    SOCKADDR_IN addr;
    char buf[256];
    char buf2[300];
    // zusätzliche Variabeln
    FD_SET fdSet;
    SOCKET clients[MAX_CLIENTS];
    int i;

    // Winsock starten
    rc=startWinsock();
    if(rc!=0) {
        printf(&quot;Fehler: startWinsock, fehler code: %ld\n&quot;,rc);
        return 1;
    } else {
        printf(&quot;Winsock gestartet!\n&quot;);
    }

    // Socket erstellen
    acceptSocket=socket(AF_INET,SOCK_STREAM,0);
    if(acceptSocket==INVALID_SOCKET) {
        printf(&quot;Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n&quot;,WSAGetLastError());
        return 1;
    } else {
        printf(&quot;Socket erstellt!\n&quot;);
    }

    // Socket binden
    memset(&amp;addr,0,sizeof(SOCKADDR_IN));
    addr.sin_family=AF_INET;
    addr.sin_port=htons(12345);
    addr.sin_addr.s_addr=INADDR_ANY; // gewisse compiler brauchen hier ADDR_ANY
    rc=bind(acceptSocket,(SOCKADDR*)&amp;addr,sizeof(SOCKADDR_IN));
    if(rc==SOCKET_ERROR) {
        printf(&quot;Fehler: bind, fehler code: %d\n&quot;,WSAGetLastError());
        return 1;
    } else {
        printf(&quot;Socket an port 12345 gebunden\n&quot;);
    }

    // In den listen Modus
    rc=listen(acceptSocket,10);
    if(rc==SOCKET_ERROR) {
        printf(&quot;Fehler: listen, fehler code: %d\n&quot;,WSAGetLastError());
        return 1;
    } else {
        printf(&quot;acceptSocket ist im listen Modus....\n&quot;);
    }

    for(i=0;i&lt;MAX_CLIENTS;i++) {
        clients[i]=INVALID_SOCKET;
    }

    while(1) {
        FD_ZERO(&amp;fdSet); // Inhalt leeren
        FD_SET(acceptSocket,&amp;fdSet); // Den Socket der verbindungen annimmt hinzufügen

        // alle gültigen client sockets hinzufügen (nur die die nicht INVALID_SOCKET sind)
        for(i=0;i&lt;MAX_CLIENTS;i++) {
            if(clients[i]!=INVALID_SOCKET) {
                FD_SET(clients[i],&amp;fdSet);
            }
        }

        rc=select(0,&amp;fdSet,NULL,NULL,NULL);
        // nicht vergessen den ersten parameter bei anderen betriebssystem anzugeben
        if(rc==SOCKET_ERROR) {
            printf(&quot;Fehler: select, fehler code: %i\n&quot;,WSAGetLastError());
            return 1;
        }

        // acceptSocket is im fd_set? =&gt; verbindung annehmen (sofern es platz hat)
        if(FD_ISSET(acceptSocket,&amp;fdSet)) {
            // einen freien platz für den neuen client suchen, und die verbingung annehmen
            for(i=0;i&lt;MAX_CLIENTS;i++) {
                if(clients[i]==INVALID_SOCKET) {
                    clients[i]=accept(acceptSocket,NULL,NULL);
                    printf(&quot;Neuen Client angenommen (%d)\n&quot;,i);
                    break;
                }
            }
        }
        // prüfen wlecher client sockets im fd_set sind
        for(i=0;i&lt;MAX_CLIENTS;i++) {
            if(clients[i]==INVALID_SOCKET) {
                continue; // ungültiger socket, d.h. kein verbunder client an dieser position im array
            }
            if(FD_ISSET(clients[i],&amp;fdSet)) {
                rc=recv(clients[i],buf,256,0);
                // prüfen ob die verbindung geschlossen wurde oder ein fehler auftrat
                if(rc==0 || rc==SOCKET_ERROR) {
                    printf(&quot;Client %d hat die Verbindung geschlossen\n&quot;,i);
                    closesocket(clients[i]); // socket schliessen
                    clients[i]=INVALID_SOCKET; // seinen platz wieder freigeben
                } else {
                    buf[rc]='\0';
                    // daten ausgeben und eine antwort senden
                    printf(&quot;Client %d hat folgendes gesandt: %s\n&quot;,i,buf);
                    // antwort senden
                    sprintf(buf2,&quot;Du mich auch %s\n&quot;,buf);
                    send(clients[i],buf2,(int)strlen(buf2),0);
                }
            }
        }
    }
}
</code></pre>
<p>Client</p>
<pre><code>#include &lt;windows.h&gt;
#include &lt;winsock2.h&gt;
#include &lt;stdio.h&gt;

//Prototypen
int startWinsock(void);

int main()
{
  long rc;
  SOCKET s;
  SOCKADDR_IN addr;
  char buf[256];

  // Winsock starten
  rc=startWinsock();
  if(rc!=0)
  {
    printf(&quot;Fehler: startWinsock, fehler code: %d\n&quot;,rc);
    return 1;
  }
  else
  {
    printf(&quot;Winsock gestartet!\n&quot;);
  }

  // Socket erstellen
  s=socket(AF_INET,SOCK_STREAM,0);
  if(s==INVALID_SOCKET)
  {
    printf(&quot;Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n&quot;,WSAGetLastError());
    return 1;
  }
  else
  {
    printf(&quot;Socket erstellt!\n&quot;);
  }

  // Verbinden
  memset(&amp;addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten
  addr.sin_family=AF_INET;
  addr.sin_port=htons(12345); // wir verwenden mal port 12345
  addr.sin_addr.s_addr=inet_addr(&quot;127.0.0.1&quot;); // zielrechner ist unser eigener

  rc=connect(s,(SOCKADDR*)&amp;addr,sizeof(SOCKADDR));
  if(rc==SOCKET_ERROR)
  {
    printf(&quot;Fehler: connect gescheitert, fehler code: %d\n&quot;,WSAGetLastError());
    return 1;
  }
  else
  {
    printf(&quot;Verbunden mit 127.0.0.1..\n&quot;);
  }

  // Daten austauschen
  while(rc!=SOCKET_ERROR)
  {
    printf(&quot;\nZeichenfolge eingeben [max 256]: &quot;);
    gets(buf);
    send(s,buf,strlen(buf),0);
    rc=recv(s,buf,256,0);
    if(rc==0)
    {
      printf(&quot;Server hat die Verbindung getrennt..\n&quot;);
      break;
    }
    if(rc==SOCKET_ERROR)
    {
      printf(&quot;Fehler: recv, fehler code: %d\n&quot;,WSAGetLastError());
      break;
    }
    buf[rc]='\0';
    printf(&quot;\nServer antwortet: %s\n&quot;,buf);
  }
  closesocket(s);
  WSACleanup();
  return 0;
}

int startWinsock(void)
{
  WSADATA wsa;
  return WSAStartup(MAKEWORD(2,0),&amp;wsa);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2501048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2501048</guid><dc:creator><![CDATA[m.sc.m]]></dc:creator><pubDate>Mon, 04 Jul 2016 06:33:54 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Socket Server &#x2F; Client on Mon, 04 Jul 2016 07:08:50 GMT]]></title><description><![CDATA[<p>Du hast doch bei deinem Server eine Struktur, die alle sockets von eingegangenen Verbindungen enthält.</p>
<p>Wenn du jetzt also in deiner Nachrichtenschleife von einem der Sockets etwas zugeschickt bekommst, dann sendest du halt als Konsequenz diese Nachricht an alle Sockets in dieser Struktur weiter. Außer natürlich an den, von dem die Nachricht kommt.<br />
So fern ich mich erinnere (länger her) werden bei Clients, die die Verbindungen trennen auch Nachrichten mit irgendeinem Sondercodd geschickt - die natürlich nicht weiter schicken sondern entsprechend verarbeiten.</p>
<p>Die Problematik bei &quot;Clients sollen empfangen und senden können&quot; verstehe ich nicht.<br />
Du horchst auf den Server (permanent, non blocking) und das senden wird wohl als Resultat von irgendeiner GUI Aktion geschehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2501052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2501052</guid><dc:creator><![CDATA[cvcv]]></dc:creator><pubDate>Mon, 04 Jul 2016 07:08:50 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Socket Server &#x2F; Client on Mon, 04 Jul 2016 07:15:12 GMT]]></title><description><![CDATA[<p>m.sc.m schrieb:</p>
<blockquote>
<p>Ich habe folgende Programme (siehe unten) geschrieben.</p>
</blockquote>
<p>Wirklich?</p>
<p>m.sc.m schrieb:</p>
<blockquote>
<p>Wie muss ich den Server bzw. den Client umschreiben, dass der Server alle Nachrichten an alle Clienten weiterleitet?</p>
</blockquote>
<p>Wenn es dein Programm ist, solltest du das wissen.<br />
Aber schau mal in Zeile 115ff. Die Achricht schickst du nicht nur an client[i] sondern auch an alle anderen gültigen Einträge aus client.</p>
<p>m.sc.m schrieb:</p>
<blockquote>
<p>Außerdem soll der Server alle Aktionen (Nachrichten, Clientenadressen etc) speichern (auf die Festplatte).</p>
</blockquote>
<p>Da machst du an derselben Stelle.</p>
<p>m.sc.m schrieb:</p>
<blockquote>
<p>Die Clienten sollen die Nachrichten empfangen und senden können? (C++ 11 Thread?).</p>
</blockquote>
<p>Tun sie das nicht?<br />
Oder möchtest du auf das Warten bei der Eingabe verzichten?.<br />
Nebenbei ist <code>gets</code> böse und abgekündigt. Das verwendet man seit 25 Jahren nicht mehr.</p>
<p>Und mit C++ hat der Code nichts zu tun. Das ist reines C.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2501053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2501053</guid><dc:creator><![CDATA[DirkB]]></dc:creator><pubDate>Mon, 04 Jul 2016 07:15:12 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Socket Server &#x2F; Client on Mon, 04 Jul 2016 07:15:30 GMT]]></title><description><![CDATA[<p>Also in Zeile 62 wird die Eingabe des Clienten (Benutzers) abgefangen und anschließend an den Server gesendet.</p>
<p>In Zeile 72 wird die (eventuelle) Nachricht vom Server ausgegeben.<br />
Hier möchte ich aber, dass alle Nachrichten, die vor, bei und direkt beim absenden geschickte Nachricht sofort ausgegeben wird und nicht &quot;irgendwann&quot; bzw &quot;teilweise&quot; danach.</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2501054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2501054</guid><dc:creator><![CDATA[m.sc.m]]></dc:creator><pubDate>Mon, 04 Jul 2016 07:15:30 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Socket Server &#x2F; Client on Mon, 04 Jul 2016 17:32:42 GMT]]></title><description><![CDATA[<p>DirkB schrieb:</p>
<blockquote>
<p>m.sc.m schrieb:</p>
<blockquote>
<p>Ich habe folgende Programme (siehe unten) geschrieben.</p>
</blockquote>
<p>Wirklich?</p>
<p>m.sc.m schrieb:</p>
<blockquote>
<p>Wie muss ich den Server bzw. den Client umschreiben, dass der Server alle Nachrichten an alle Clienten weiterleitet?</p>
</blockquote>
<p>Wenn es dein Programm ist, solltest du das wissen.<br />
Aber schau mal in Zeile 115ff. Die Achricht schickst du nicht nur an client[i] sondern auch an alle anderen gültigen Einträge aus client.</p>
<p>m.sc.m schrieb:</p>
<blockquote>
<p>Außerdem soll der Server alle Aktionen (Nachrichten, Clientenadressen etc) speichern (auf die Festplatte).</p>
</blockquote>
<p>Da machst du an derselben Stelle.</p>
<p>m.sc.m schrieb:</p>
<blockquote>
<p>Die Clienten sollen die Nachrichten empfangen und senden können? (C++ 11 Thread?).</p>
</blockquote>
<p>Tun sie das nicht?<br />
Oder möchtest du auf das Warten bei der Eingabe verzichten?.<br />
Nebenbei ist <code>gets</code> böse und abgekündigt. Das verwendet man seit 25 Jahren nicht mehr.</p>
<p>Und mit C++ hat der Code nichts zu tun. Das ist reines C.</p>
</blockquote>
<p>Ich hab es mit 2 Clients getestet und sie erhalten nur ihre eigenen Nachrichten und erhalten keine anderen Nachrichten....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2501223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2501223</guid><dc:creator><![CDATA[m.sc.m]]></dc:creator><pubDate>Mon, 04 Jul 2016 17:32:42 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Socket Server &#x2F; Client on Mon, 04 Jul 2016 17:35:23 GMT]]></title><description><![CDATA[<p>m.sc.m schrieb:</p>
<blockquote>
<p>Ich hab es mit 2 Clients getestet und sie erhalten nur ihre eigenen Nachrichten und erhalten keine anderen Nachrichten....</p>
</blockquote>
<p>liest du:</p>
<p>DirkB schrieb:</p>
<blockquote>
<p>m.sc.m schrieb:</p>
<blockquote>
<p>Wie muss ich den Server bzw. den Client umschreiben, dass der Server alle Nachrichten an alle Clienten weiterleitet?</p>
</blockquote>
<p>Wenn es dein Programm ist, solltest du das wissen.<br />
Aber schau mal in Zeile 115ff. <strong>Die Nachricht schickst du nicht nur an client[i] sondern auch an alle anderen gültigen Einträge aus client.</strong></p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2501224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2501224</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 04 Jul 2016 17:35:23 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Socket Server &#x2F; Client on Mon, 04 Jul 2016 17:40:26 GMT]]></title><description><![CDATA[<p>Entweder habe ich grad zu viel Alkohol intus <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>aber wie muss ich dann es ändern, wenn zum Beispiel der client 0, Client 1 und Client 2 die Nachrichten der anderen Clienten auch empfangen?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2501225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2501225</guid><dc:creator><![CDATA[m.sc.m]]></dc:creator><pubDate>Mon, 04 Jul 2016 17:40:26 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Socket Server &#x2F; Client on Mon, 04 Jul 2016 20:20:32 GMT]]></title><description><![CDATA[<p>Dieser Code kommt nach Zeile 113, aber noch im else-Zweig</p>
<pre><code>for(j=0;j&lt;MAX_CLIENTS;j++) {
            if (j==i) continue;  // aktueller client?
            if(clients[j]==INVALID_SOCKET) {
                continue; // ungültiger socket, d.h. kein verbunder client an dieser position im array
            }
            send(clients[j],buf,(int)strlen(buf),0);
          }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2501231</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2501231</guid><dc:creator><![CDATA[DirkB]]></dc:creator><pubDate>Mon, 04 Jul 2016 20:20:32 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Socket Server &#x2F; Client on Mon, 04 Jul 2016 20:45:13 GMT]]></title><description><![CDATA[<p>Falsches Subforum - ist WinAPI und nicht C++.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2501232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2501232</guid><dc:creator><![CDATA[EOP]]></dc:creator><pubDate>Mon, 04 Jul 2016 20:45:13 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Socket Server &#x2F; Client on Wed, 06 Jul 2016 21:06:12 GMT]]></title><description><![CDATA[<p>Wenn du eine nachricht an alle senden willst musst du das mit einer schleife machen wie die hier:</p>
<pre><code>else {
           buf[rc]='\0';
           // daten ausgeben und eine antwort senden
           printf(&quot;Client %d hat folgendes gesandt: %s\n&quot;,i,buf);
           //Jetzt an alle clients die nachricht schicken
           for(int a = 0;a &lt; MAX_CLIENTS;a++)
           {
               if(a != i)
               {
                 //Nachricht nur schicken wenn es nicht der sender ist
                 send(clients[a],buf,(int)strlen(buf),0);
               }
           }
     }
</code></pre>
<p>Wenn der client empfangen und gleichzeitig die eingabe evrarbeiten soll musst du threads benutzen mit der funktion CreateThread geht das ganz gut <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> mehr infos über threads gibt google <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Und wenn du die nachrichten von den clients speischern willst scheib sie in eine<br />
txt datei dazu gibt viel in google</p>
<p>sry wegen der rechtschreibung <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="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2501473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2501473</guid><dc:creator><![CDATA[helper_D]]></dc:creator><pubDate>Wed, 06 Jul 2016 21:06:12 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Socket Server &#x2F; Client on Thu, 07 Jul 2016 03:59:33 GMT]]></title><description><![CDATA[<p>helper_D schrieb:</p>
<blockquote>
<p>Wenn der client empfangen und gleichzeitig die eingabe evrarbeiten soll musst du threads benutzen</p>
</blockquote>
<p>Mit <code>kbhit()</code> (ist ja Windows und C) sollte das auch gehen. (Nicht die Threads, aber das nicht-blocklierende lesen von der Konsole)</p>
<p>Wenn du aber mal eine GUI dafür machen willst, musst du das Programm eh umbauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2501484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2501484</guid><dc:creator><![CDATA[DirkB]]></dc:creator><pubDate>Thu, 07 Jul 2016 03:59:33 GMT</pubDate></item></channel></rss>