<?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[Client-Server-System für Chat aufbauen]]></title><description><![CDATA[<p>Guten Abend,</p>
<p>nachdem ich jetzt mit einfacher Netwerkprogrammierung klar komme, wollte ich mich an einen Chat für mehrere Personen wagen. Serverseitig habe ich einfach an ein Array mit den Benutzern gedacht, das ich dann z.B. bei einer Nachricht durchlaufe und diese jedem schicke.</p>
<p>Bloß weiß ich noch nicht, &quot;wie&quot; sich der Server und die Clients verständigen sollen. Denn es soll ja nicht nur einen einfachen Schriftwechsel Client -&gt; Server -&gt; alle Clients geben, sondern Server und Clients sollen auch miteinander kommunizieren sollen.</p>
<p>z.B.</p>
<ul>
<li>Hans (Client) verlässt den Chat einer Nachricht ab.</li>
<li>Der Server fragt Client 5 nach seinem Nicknamen und wartet dann auf die Antwort.</li>
<li>Peter (Client) pingt den Server an und wartet auf die Antwort.</li>
</ul>
<p>Damit ich ein send() auch mit einem recv() empfangen kann, sende ich (in vier Bytes) zuerst die Länge der Nachricht, die jetzt folgt.</p>
<p>Dann habe ich mir überlegt, ich könnte Schlüsselwörter benutzen, je nach gewählter Aktion. Danach kommt ein Bit (also ein Byte, weil es ja ein char ist), dass sagt, ob es sich hierbei um eine Frage handelt oder um eine Antwort. Danach kommt ein Schlüsselwort (bzw. eine Nummer, um Platz zu sparen) und danach erst der eigentliche text.</p>
<p>Wenn Hans jetzt also den Chat mit einer Nachricht verlassen will, schickt er folgendes:</p>
<pre><code>00200exitAuf Wiedersehen.
 |  |  |         |
 |  |  |         |---- Seine Nachricht.
 |  |  |--- Schlüsselwort (exit) zum Verlassen.
 |  |------ Anfrage an den Server
 |--------- Anzahl der folgenden Zeichen.
</code></pre>
<p>Und der Server antwortet dann:</p>
<pre><code>00031ok
 |  | |
 |  | |
 |  | |--- Schlüsselwort ok - Nachricht ist angekommen.
 |  |------ Antwort vom Server
 |--------- Anzahl der folgenden Zeichen.
</code></pre>
<p>Wäre so ein System umsetzbar und würde auch in der Praxis funktionieren? Oder wie ist das bei den anderen &quot;großen&quot; Chats gelöst? Dort gibt es ja schließlich nicht auch nur eine Nachricht, sondern auch noch einen Empfänger bei Privatnachrichten, Statusmeldungen usw.</p>
<p>Oder würde der Server bei dem ganzen &quot;unnötigen&quot; Datenmüll irgendwann dicht machen?</p>
<p>// edit: sorry, ist hier falsch sehe ich gerade.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/254689/client-server-system-für-chat-aufbauen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 07:00:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/254689.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 19 Nov 2009 18:22:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Client-Server-System für Chat aufbauen on Thu, 19 Nov 2009 18:27:25 GMT]]></title><description><![CDATA[<p>Guten Abend,</p>
<p>nachdem ich jetzt mit einfacher Netwerkprogrammierung klar komme, wollte ich mich an einen Chat für mehrere Personen wagen. Serverseitig habe ich einfach an ein Array mit den Benutzern gedacht, das ich dann z.B. bei einer Nachricht durchlaufe und diese jedem schicke.</p>
<p>Bloß weiß ich noch nicht, &quot;wie&quot; sich der Server und die Clients verständigen sollen. Denn es soll ja nicht nur einen einfachen Schriftwechsel Client -&gt; Server -&gt; alle Clients geben, sondern Server und Clients sollen auch miteinander kommunizieren sollen.</p>
<p>z.B.</p>
<ul>
<li>Hans (Client) verlässt den Chat einer Nachricht ab.</li>
<li>Der Server fragt Client 5 nach seinem Nicknamen und wartet dann auf die Antwort.</li>
<li>Peter (Client) pingt den Server an und wartet auf die Antwort.</li>
</ul>
<p>Damit ich ein send() auch mit einem recv() empfangen kann, sende ich (in vier Bytes) zuerst die Länge der Nachricht, die jetzt folgt.</p>
<p>Dann habe ich mir überlegt, ich könnte Schlüsselwörter benutzen, je nach gewählter Aktion. Danach kommt ein Bit (also ein Byte, weil es ja ein char ist), dass sagt, ob es sich hierbei um eine Frage handelt oder um eine Antwort. Danach kommt ein Schlüsselwort (bzw. eine Nummer, um Platz zu sparen) und danach erst der eigentliche text.</p>
<p>Wenn Hans jetzt also den Chat mit einer Nachricht verlassen will, schickt er folgendes:</p>
<pre><code>00200exitAuf Wiedersehen.
 |  |  |         |
 |  |  |         |---- Seine Nachricht.
 |  |  |--- Schlüsselwort (exit) zum Verlassen.
 |  |------ Anfrage an den Server
 |--------- Anzahl der folgenden Zeichen.
</code></pre>
<p>Und der Server antwortet dann:</p>
<pre><code>00031ok
 |  | |
 |  | |
 |  | |--- Schlüsselwort ok - Nachricht ist angekommen.
 |  |------ Antwort vom Server
 |--------- Anzahl der folgenden Zeichen.
</code></pre>
<p>Wäre so ein System umsetzbar und würde auch in der Praxis funktionieren? Oder wie ist das bei den anderen &quot;großen&quot; Chats gelöst? Dort gibt es ja schließlich nicht auch nur eine Nachricht, sondern auch noch einen Empfänger bei Privatnachrichten, Statusmeldungen usw.</p>
<p>Oder würde der Server bei dem ganzen &quot;unnötigen&quot; Datenmüll irgendwann dicht machen?</p>
<p>// edit: sorry, ist hier falsch sehe ich gerade.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1810565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1810565</guid><dc:creator><![CDATA[Amgon]]></dc:creator><pubDate>Thu, 19 Nov 2009 18:27:25 GMT</pubDate></item><item><title><![CDATA[Reply to Client-Server-System für Chat aufbauen on Thu, 19 Nov 2009 18:45:28 GMT]]></title><description><![CDATA[<p>ich würde mich am msn-protokoll orientieren.<br />
<a href="http://www.google.de/search?hl=de&amp;source=hp&amp;q=msnp&amp;meta=&amp;aq=f&amp;oq=" rel="nofollow">http://www.google.de/search?hl=de&amp;source=hp&amp;q=msnp&amp;meta=&amp;aq=f&amp;oq=</a><br />
-&gt;<br />
<a href="http://en.wikipedia.org/wiki/Microsoft_Notification_Protocol" rel="nofollow">http://en.wikipedia.org/wiki/Microsoft_Notification_Protocol</a></p>
<p>ganz unten (weiterführende links) die ersten beiden sind die interessanten <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="😉"
    /></p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1810581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1810581</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 19 Nov 2009 18:45:28 GMT</pubDate></item><item><title><![CDATA[Reply to Client-Server-System für Chat aufbauen on Thu, 19 Nov 2009 19:13:08 GMT]]></title><description><![CDATA[<p>Das is doch schonmal ein super Beispiel.</p>
<p>Auch MSN benutzt also solche Schlüsselwörter. Wenn man es etwas weniger komplex hält, könnte es also doch beispielsweise so aussehen?</p>
<pre><code>&gt; CON username  // als &quot;username&quot; anmelden
&lt; SUC           // erfolgreich
&gt; MSG hallo     // Nachricht &quot;hallo&quot; versenden
&lt; SUC           // erfolgreich

&lt; REQ STATUS    // Server fragt nach Status
&gt; SND ONL       // &quot;online&quot; zurücksenden
</code></pre>
<p>Ich werde mir die komplette Seite mal durchlesen und mich daran orientieren, vielen Dank. <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/1810602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1810602</guid><dc:creator><![CDATA[Amgon]]></dc:creator><pubDate>Thu, 19 Nov 2009 19:13:08 GMT</pubDate></item><item><title><![CDATA[Reply to Client-Server-System für Chat aufbauen on Thu, 19 Nov 2009 19:50:48 GMT]]></title><description><![CDATA[<pre><code>&gt; CON username  // als &quot;username&quot; anmelden
&lt; SUC           // erfolgreich
</code></pre>
<p>sieht gut aus</p>
<pre><code>&gt; MSG hallo     // Nachricht &quot;hallo&quot; versenden
&lt; SUC           // erfolgreich
</code></pre>
<p>das hier weniger - das problem ist ja immer, dass der server nicht genau weiß, wie lang die nachricht des clients ist (und die ja gestückelt ankommen kann), also braucht MSG noch ne angabe der länge des folgenden strings</p>
<pre><code>&lt; REQ STATUS    // Server fragt nach Status
&gt; SND ONL       // &quot;online&quot; zurücksenden
</code></pre>
<p>an und für sich auch nicht schlecht - aber wie kommst du darauf, dass der server den client nach dem status fragt?<br />
ich würde sagen: bei jeder statusänderung sendet der client das an den server(der bestätigt) und so bald ein anderer user online kommt, hat man dann die daten zur hand, die man ihm schicken muss(aus serversicht gesehen).</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1810637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1810637</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 19 Nov 2009 19:50:48 GMT</pubDate></item><item><title><![CDATA[Reply to Client-Server-System für Chat aufbauen on Fri, 20 Nov 2009 15:19:12 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<pre><code>&gt; MSG hallo     // Nachricht &quot;hallo&quot; versenden
&lt; SUC           // erfolgreich
</code></pre>
<p>das hier weniger - das problem ist ja immer, dass der server nicht genau weiß, wie lang die nachricht des clients ist (und die ja gestückelt ankommen kann), also braucht MSG noch ne angabe der länge des folgenden strings</p>
</blockquote>
<p>Ja, ich habe eigentlich gedacht, dass ich vorher die Länge mitsende.</p>
<p>Also z.B.</p>
<pre><code>0010&gt; CON user
0005&lt; SUC

usw.
</code></pre>
<p>Oder ist garantiert, dass kürzere Nachrichten (ca. 20 Zeichen) so ankommen und die Länge brauche ich nur bei Benutzernachrichten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1811040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1811040</guid><dc:creator><![CDATA[Amgon]]></dc:creator><pubDate>Fri, 20 Nov 2009 15:19:12 GMT</pubDate></item><item><title><![CDATA[Reply to Client-Server-System für Chat aufbauen on Fri, 20 Nov 2009 15:36:49 GMT]]></title><description><![CDATA[<blockquote>
<p>Oder ist garantiert, dass kürzere Nachrichten (ca. 20 Zeichen) so ankommen und die Länge brauche ich nur bei Benutzernachrichten?</p>
</blockquote>
<p>Nein, das ist nicht garantiert (egal welche Länge).. und in der Praxis ist es garantiert anders.. besonders, wenn Du deine Applikation vorführen möchtest... <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1811052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1811052</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Fri, 20 Nov 2009 15:36:49 GMT</pubDate></item><item><title><![CDATA[Reply to Client-Server-System für Chat aufbauen on Fri, 20 Nov 2009 15:40:52 GMT]]></title><description><![CDATA[<p>Dann belasse ich das bei der Variante, vielen Dank für die Antworten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1811053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1811053</guid><dc:creator><![CDATA[Amgon]]></dc:creator><pubDate>Fri, 20 Nov 2009 15:40:52 GMT</pubDate></item><item><title><![CDATA[Reply to Client-Server-System für Chat aufbauen on Fri, 20 Nov 2009 16:11:50 GMT]]></title><description><![CDATA[<p>Wenn du aber konsequent Nachrichten jeder Art mit einer neuen Zeile terminierst (so wie bei IRC), kannst du auf die Längenangaben verzichten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1811078</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1811078</guid><dc:creator><![CDATA[Nanyuki]]></dc:creator><pubDate>Fri, 20 Nov 2009 16:11:50 GMT</pubDate></item><item><title><![CDATA[Reply to Client-Server-System für Chat aufbauen on Fri, 20 Nov 2009 16:44:42 GMT]]></title><description><![CDATA[<p>Das heißt ich empfange dann per recv() in einer Schleife, und sobald \r\n (also 10 und 13?) aufeinander folgen, habe ich alles?</p>
<p>Das klingt sogar noch etwas einfacher als das mit der Länge - obwohl das jetzt auch einwandfrei funktioniert. Ich schaue mal, dankeschön. <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/1811102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1811102</guid><dc:creator><![CDATA[Amgon]]></dc:creator><pubDate>Fri, 20 Nov 2009 16:44:42 GMT</pubDate></item></channel></rss>