<?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[Allgemeine Fragen zu Sockets (Winsock2)]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe vor ein paar Tagen angefangen, mich in Sockets einzuarbeiten. (Bislang nur TCP). Mittlerweile habe ich einen einfachen Server/Client und der Server kann Strings beliebiger länge übermitteln <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="😃"
    /><br />
Natürlich habe ich jetzt ein paar Fragen:</p>
<p>a) meistens verschickt man öfters ähnliche Daten - wie unterscheidet man am Besten zwischen den einzelnen &quot;Paketen&quot;? Ich habe das jetzt so gemacht, dass ich zunächst ein 2 Byte Integer mit dem Wert 0xFFFF (kommt bei Strings halt so gut wie nie vor) schreibe und damit einen neuen Wert kennzeichne. Danach kommt die Länge (4 byte) und dann die Daten. Was gibt es noch für gute Alternativen?</p>
<p>b) Wie kann ich rausfinden, ob der Client / Server abgeschmiert ist? Momentan schau ich beim Schreiben, was der return Wert ist (wird ja zu SOCKET_ERROR wenn was schief läuft) aber nur weil ein send() &gt; 0 zurückgibt, heißt es noch nicht, dass die Daten tatsächlich am anderen Ende angekommen sind sondern nur im Puffer gelandet sind, oder?<br />
Wenn ich z.B. einfach den Server oder den Client schließe, dann kriegt die andere Seiten den Fehler sofort mit (wenn keine Daten übermittelt werden, mache ich einfach ein send() mit 0 Bytes). Wenn ich allerdings die Netzwerkverbindung trenne, denken beide Applikationen, alles wäre im Butter.</p>
<p>c) Mein Server läuft in einem eigenen Thread und hier drin habe ich mittels select() gearbeitet, damit möglichst wenige Funktionen blocken (mein Socket ist ein blocking-socket). Wie kann ich rausfinden, ob der Puffer (der mit send() gefüllt wird) bereit ist, neue Daten anzunehmen (und nicht blockt).</p>
<p>Das wars fürs erste. <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="🙂"
    /><br />
Danke für jegliche Tipps!</p>
<p>Gruß</p>
<p>Mark</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/177834/allgemeine-fragen-zu-sockets-winsock2</link><generator>RSS for Node</generator><lastBuildDate>Fri, 10 Jul 2026 16:50:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/177834.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 04 Apr 2007 14:26:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Allgemeine Fragen zu Sockets (Winsock2) on Wed, 04 Apr 2007 14:26:49 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe vor ein paar Tagen angefangen, mich in Sockets einzuarbeiten. (Bislang nur TCP). Mittlerweile habe ich einen einfachen Server/Client und der Server kann Strings beliebiger länge übermitteln <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="😃"
    /><br />
Natürlich habe ich jetzt ein paar Fragen:</p>
<p>a) meistens verschickt man öfters ähnliche Daten - wie unterscheidet man am Besten zwischen den einzelnen &quot;Paketen&quot;? Ich habe das jetzt so gemacht, dass ich zunächst ein 2 Byte Integer mit dem Wert 0xFFFF (kommt bei Strings halt so gut wie nie vor) schreibe und damit einen neuen Wert kennzeichne. Danach kommt die Länge (4 byte) und dann die Daten. Was gibt es noch für gute Alternativen?</p>
<p>b) Wie kann ich rausfinden, ob der Client / Server abgeschmiert ist? Momentan schau ich beim Schreiben, was der return Wert ist (wird ja zu SOCKET_ERROR wenn was schief läuft) aber nur weil ein send() &gt; 0 zurückgibt, heißt es noch nicht, dass die Daten tatsächlich am anderen Ende angekommen sind sondern nur im Puffer gelandet sind, oder?<br />
Wenn ich z.B. einfach den Server oder den Client schließe, dann kriegt die andere Seiten den Fehler sofort mit (wenn keine Daten übermittelt werden, mache ich einfach ein send() mit 0 Bytes). Wenn ich allerdings die Netzwerkverbindung trenne, denken beide Applikationen, alles wäre im Butter.</p>
<p>c) Mein Server läuft in einem eigenen Thread und hier drin habe ich mittels select() gearbeitet, damit möglichst wenige Funktionen blocken (mein Socket ist ein blocking-socket). Wie kann ich rausfinden, ob der Puffer (der mit send() gefüllt wird) bereit ist, neue Daten anzunehmen (und nicht blockt).</p>
<p>Das wars fürs erste. <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="🙂"
    /><br />
Danke für jegliche Tipps!</p>
<p>Gruß</p>
<p>Mark</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1259318</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1259318</guid><dc:creator><![CDATA[pub00515]]></dc:creator><pubDate>Wed, 04 Apr 2007 14:26:49 GMT</pubDate></item><item><title><![CDATA[Reply to Allgemeine Fragen zu Sockets (Winsock2) on Thu, 05 Apr 2007 06:46:33 GMT]]></title><description><![CDATA[<p>a)<br />
- verwende strukturen um deine daten zu versenden.<br />
- wenn du auf ein \0 stößt wäre das sicherlich auch ein zeichen für das ende der übertragung eines strings. dazu musst du eben byteweise bzw. gepuffert die daten aus den sockets auslesen, wenn meherer 'schlange stehen' und nicht einfach ALLES was grade ansteht. danach einfach die empfangenen daten an \0 in einzelen teilstrings splitten. tada <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>b)<br />
abschmieren kann in dem sinne nur deine anwendung. (aber...) TCP is ein verbindungsorientiertes protokoll, es stellt immer sicher das alle daten und in richtiger reihenfolge ankommen. sicher kann es auch einen RST oder FIN geben. aber das wird dir dann durch ein SOCKET_ERROR bzw. durch die anderen fehlercodes mitgeteilt (evtl. auch erst nach entsprechenden timeout). aber du wirst immer davon kenntnis bekommen <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="🙂"
    /><br />
wenn du jetzt hier mit den begriffen nichts anfangen konntest, dann hock dich bitte nochmals hin in lern das OSI modell von layer 1-7 <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>c)<br />
im select gibt es unterschiedliche fdSets für die jeweiligen dinge die du prüfen möchtest. fdRead für daten zum abruf. fdWrite für bereitschaft zum senden.<br />
die MSDN sollte dir hier sicherlich mehr infos geben können <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>grützi<br />
RadiatioN Off</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1259735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1259735</guid><dc:creator><![CDATA[RadiatioN Off]]></dc:creator><pubDate>Thu, 05 Apr 2007 06:46:33 GMT</pubDate></item><item><title><![CDATA[Reply to Allgemeine Fragen zu Sockets (Winsock2) on Thu, 05 Apr 2007 15:09:19 GMT]]></title><description><![CDATA[<p>c) auf jeden fall auf non-blocking umschalten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1260208</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1260208</guid><dc:creator><![CDATA[+]]></dc:creator><pubDate>Thu, 05 Apr 2007 15:09:19 GMT</pubDate></item></channel></rss>