<?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[100%ig Zuverlässige TCP&#x2F;IP Kommunikation...]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich stehe gerade auf dem Schlauch... ich brauche eine 100%ig zuverlässige TCP/IP Kommunikation. Also:<br />
- Der Sender (Client) muss 100%ig zuverlässig wissen, ob der Empfänger (Server) die Nachricht erhalten hat<br />
- Der Empfänger (Server) muss 100%ig zuverlässig wissen, dass der Sender (Client) erfahren hat, dass der Empfänger die Nachricht erhalten hat</p>
<p>Irgendwie beisst sich da Gerade der Hund in den Schwanz... ich finde so auf die schnelle keine Lösung dafür...</p>
<p>Weiss jemand Rat? Hat jemand sowas schon mal gemacht?</p>
<p>PS: Mir würde es ausreichen, wenn man für jede Nachricht eine neue Verbindung zwischen CLient und Server aufbaut; das ich für mich als Beispiel ok.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/185298/100-ig-zuverlässige-tcp-ip-kommunikation</link><generator>RSS for Node</generator><lastBuildDate>Thu, 02 Jul 2026 06:13:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/185298.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 23 Jun 2007 19:43:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 100%ig Zuverlässige TCP&#x2F;IP Kommunikation... on Sat, 23 Jun 2007 19:43:59 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich stehe gerade auf dem Schlauch... ich brauche eine 100%ig zuverlässige TCP/IP Kommunikation. Also:<br />
- Der Sender (Client) muss 100%ig zuverlässig wissen, ob der Empfänger (Server) die Nachricht erhalten hat<br />
- Der Empfänger (Server) muss 100%ig zuverlässig wissen, dass der Sender (Client) erfahren hat, dass der Empfänger die Nachricht erhalten hat</p>
<p>Irgendwie beisst sich da Gerade der Hund in den Schwanz... ich finde so auf die schnelle keine Lösung dafür...</p>
<p>Weiss jemand Rat? Hat jemand sowas schon mal gemacht?</p>
<p>PS: Mir würde es ausreichen, wenn man für jede Nachricht eine neue Verbindung zwischen CLient und Server aufbaut; das ich für mich als Beispiel ok.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312392</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312392</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Sat, 23 Jun 2007 19:43:59 GMT</pubDate></item><item><title><![CDATA[Reply to 100%ig Zuverlässige TCP&#x2F;IP Kommunikation... on Sat, 23 Jun 2007 20:01:51 GMT]]></title><description><![CDATA[<p>Quelle sendet Datenpakete am Empfänger<br />
der Empfänger quitiert das der Quelle, damit weiss die Quelle, dass die Pakete gesendet würde. Reicht das nicht oder willst du quasi die quitierung die automatisch passiert dokumentieren? O.O</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312401</guid><dc:creator><![CDATA[Zeus]]></dc:creator><pubDate>Sat, 23 Jun 2007 20:01:51 GMT</pubDate></item><item><title><![CDATA[Reply to 100%ig Zuverlässige TCP&#x2F;IP Kommunikation... on Sat, 23 Jun 2007 20:12:37 GMT]]></title><description><![CDATA[<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>PS: Mir würde es ausreichen, wenn man für jede Nachricht eine neue Verbindung zwischen CLient und Server aufbaut; das ich für mich als Beispiel ok.</p>
</blockquote>
<p>dann haste es doch. für sowas ist TCP ja da. sender baut verbindung auf, sendet seine nachricht, der empfänger macht als quittierung die verbindung wieder zu. sobald irgendwelche anomalien auftreten (z.b. verbindung wird durch RST statt durch FIN-FIN geschlossen) wissen beide, das etwas nicht geklappt hat. der empfänger schmeisst im fehlerfall die message weg und der sender versucht's nochmal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312412</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312412</guid><dc:creator><![CDATA[pale dog]]></dc:creator><pubDate>Sat, 23 Jun 2007 20:12:37 GMT</pubDate></item><item><title><![CDATA[Reply to 100%ig Zuverlässige TCP&#x2F;IP Kommunikation... on Sat, 23 Jun 2007 20:17:24 GMT]]></title><description><![CDATA[<p>Zeus schrieb:</p>
<blockquote>
<p>Quelle sendet Datenpakete am Empfänger<br />
der Empfänger quitiert das der Quelle, damit weiss die Quelle, dass die Pakete gesendet würde. Reicht das nicht</p>
</blockquote>
<p>Ist das &quot;zuverlässig&quot;?</p>
<p>Nehmen wir mal an:<br />
- Quelle sendet Daten an Empfänger (send = ok)<br />
- Empfänger liest diese und sender Quittung (send = ok)</p>
<p>Leider war jetzt zwischen dem Empfangen der Daten und dem Senden z.B. Auslastungsbeding eine &quot;größere&quot; zeit dazwischen (oder weil das Netzwerk so viele Störungen hat, was aktuell eigentlich mein Hauptproblem/ursache ist); nehemn wir also mal an 2 Sekunden.<br />
Auf der Empfängerseite habe ich beim &quot;recv&quot; als Timeout auch 2 Sekunden angegeben!!!!<br />
So was passieren kann ist folgendes:</p>
<p>- Der ursprüngliche Empfänger sendet die Quittung und diese wir dauch mittels TCP korrekt an die Ebene3 übertragen!<br />
- Der ursprüngliche Sender läuft jetzt aber in den Timeout rein während das Paket gerade eintrudelt...</p>
<p>So, jetzt haben wir den Salat: TCP hat das Pakt schon bestätigt und ich habe es nicht empfangen!!!!</p>
<p>Das ist mein Problem! Hab hier ein Beispiel wo dies genau so passiert!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312415</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Sat, 23 Jun 2007 20:17:24 GMT</pubDate></item><item><title><![CDATA[Reply to 100%ig Zuverlässige TCP&#x2F;IP Kommunikation... on Sat, 23 Jun 2007 20:20:17 GMT]]></title><description><![CDATA[<p>pale dog schrieb:</p>
<blockquote>
<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>PS: Mir würde es ausreichen, wenn man für jede Nachricht eine neue Verbindung zwischen CLient und Server aufbaut; das ich für mich als Beispiel ok.</p>
</blockquote>
<p>dann haste es doch. für sowas ist TCP ja da. sender baut verbindung auf, sendet seine nachricht, der empfänger macht als quittierung die verbindung wieder zu. sobald irgendwelche anomalien auftreten (z.b. verbindung wird durch RST statt durch FIN-FIN geschlossen) wissen beide, das etwas nicht geklappt hat. der empfänger schmeisst im fehlerfall die message weg und der sender versucht's nochmal.</p>
</blockquote>
<p>Danke für den Hinweis... sowas ähnliches habe ich auch schon gedacht aber reicht mir das wirklich? Deckt das auch mein gerade geschilderten Fall ab?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312420</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Sat, 23 Jun 2007 20:20:17 GMT</pubDate></item><item><title><![CDATA[Reply to 100%ig Zuverlässige TCP&#x2F;IP Kommunikation... on Sat, 23 Jun 2007 20:33:15 GMT]]></title><description><![CDATA[<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>pale dog schrieb:</p>
<blockquote>
<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>PS: Mir würde es ausreichen, wenn man für jede Nachricht eine neue Verbindung zwischen CLient und Server aufbaut; das ich für mich als Beispiel ok.</p>
</blockquote>
<p>dann haste es doch. für sowas ist TCP ja da. sender baut verbindung auf, sendet seine nachricht, der empfänger macht als quittierung die verbindung wieder zu. sobald irgendwelche anomalien auftreten (z.b. verbindung wird durch RST statt durch FIN-FIN geschlossen) wissen beide, das etwas nicht geklappt hat. der empfänger schmeisst im fehlerfall die message weg und der sender versucht's nochmal.</p>
</blockquote>
<p>Danke für den Hinweis... sowas ähnliches habe ich auch schon gedacht aber reicht mir das wirklich? Deckt das auch mein gerade geschilderten Fall ab?</p>
</blockquote>
<p>TCP gibt jedem Paket eine Sequenz-Nummer um das beschriebene Problem zu verhindern. Wenn ich dich richtig verstanden habe hast du den Fall beschrieben, dass die Empfangs-Bestätigung zwar losgeschickt wurde, aber zu spät beim ursprünglichen Sender eintrifft. Dann geht der Sender davon aus, dass das Paket verloren gegangen ist und schickt es nochmal los. Der Empfänger kann dann bei TCP anhand der Sequenz-Nummer feststellen, dass er dieses Paket schon einmal erhalten hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312429</guid><dc:creator><![CDATA[Christoph]]></dc:creator><pubDate>Sat, 23 Jun 2007 20:33:15 GMT</pubDate></item><item><title><![CDATA[Reply to 100%ig Zuverlässige TCP&#x2F;IP Kommunikation... on Sat, 23 Jun 2007 20:43:27 GMT]]></title><description><![CDATA[<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>pale dog schrieb:</p>
<blockquote>
<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>PS: Mir würde es ausreichen, wenn man für jede Nachricht eine neue Verbindung zwischen CLient und Server aufbaut; das ich für mich als Beispiel ok.</p>
</blockquote>
<p>dann haste es doch. für sowas ist TCP ja da. sender baut verbindung auf, sendet seine nachricht, der empfänger macht als quittierung die verbindung wieder zu. sobald irgendwelche anomalien auftreten (z.b. verbindung wird durch RST statt durch FIN-FIN geschlossen) wissen beide, das etwas nicht geklappt hat. der empfänger schmeisst im fehlerfall die message weg und der sender versucht's nochmal.</p>
</blockquote>
<p>Danke für den Hinweis... sowas ähnliches habe ich auch schon gedacht aber reicht mir das wirklich? Deckt das auch mein gerade geschilderten Fall ab?</p>
</blockquote>
<p>eigentlich schon. angenommen der empfänger schliesst die verbindung nicht, weil z.b. das netzwerk so langsam ist und er noch auf die restlichen daten wartet. in dem fall (time out) schliesst der sender die verbindung (ein hartes closesockt == RST), was der empfänger seinerseits registrieren kann. passiert selbst das nicht (netzwerkausfall genau in dem augenblick) läuft der empfänger einerseits in einen timeout und verwirft alles bisher empfangenen fragmente.<br />
also alles, was von dem vorgegebenen schema abweicht (sender: connect-send, empfänger-close -&gt; graceful disconnect <strong>auf beiden seiten</strong>), gilt als misslungene übertragung.<br />
beim normalen verbindungsabbau müssen beiden TCP's mitspielen. das müsste eigentlich reichen... <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/1312435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312435</guid><dc:creator><![CDATA[pale dog]]></dc:creator><pubDate>Sat, 23 Jun 2007 20:43:27 GMT</pubDate></item><item><title><![CDATA[Reply to 100%ig Zuverlässige TCP&#x2F;IP Kommunikation... on Sat, 23 Jun 2007 21:09:18 GMT]]></title><description><![CDATA[<p>Windos verwaltet die Pakete in eine Art &quot;Schieberegister&quot;.<br />
Schickt diese ab und wartet auf die Quittung vom Empfäneger.<br />
Wenn die Quittierung vollständig ist, wird das Schieberegister über seine Breite auf die nächste Pakete geschoben, sonst wird das wiederholt und nach n versuchen als failed eingestufft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312452</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312452</guid><dc:creator><![CDATA[Zeus]]></dc:creator><pubDate>Sat, 23 Jun 2007 21:09:18 GMT</pubDate></item><item><title><![CDATA[Reply to 100%ig Zuverlässige TCP&#x2F;IP Kommunikation... on Sat, 23 Jun 2007 21:31:19 GMT]]></title><description><![CDATA[<p>Zeus schrieb:</p>
<blockquote>
<p>Windos verwaltet die Pakete in eine Art &quot;Schieberegister&quot;.</p>
</blockquote>
<p><a href="http://de.wikipedia.org/wiki/FIFO" rel="nofollow">http://de.wikipedia.org/wiki/FIFO</a> <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="😉"
    /><br />
die anwendung schickt einzelne bytes rein (stream), der TCP stack packt selbständig pakete daraus (für darunterliegende, paketorientierte layer).<br />
<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/1312464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312464</guid><dc:creator><![CDATA[pale dog]]></dc:creator><pubDate>Sat, 23 Jun 2007 21:31:19 GMT</pubDate></item><item><title><![CDATA[Reply to 100%ig Zuverlässige TCP&#x2F;IP Kommunikation... on Sat, 23 Jun 2007 21:53:43 GMT]]></title><description><![CDATA[<p>Und auf der unterste Ebene heisst das dann Frames. Hasst du vergessen....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312474</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312474</guid><dc:creator><![CDATA[Zeus]]></dc:creator><pubDate>Sat, 23 Jun 2007 21:53:43 GMT</pubDate></item><item><title><![CDATA[Reply to 100%ig Zuverlässige TCP&#x2F;IP Kommunikation... on Sat, 23 Jun 2007 22:08:55 GMT]]></title><description><![CDATA[<p>Zeus schrieb:</p>
<blockquote>
<p>Und auf der unterste Ebene heisst das dann Frames. Hasst du vergessen....</p>
</blockquote>
<p>ja, beim snooker heisst es auch frames <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/1312484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312484</guid><dc:creator><![CDATA[pale dog]]></dc:creator><pubDate>Sat, 23 Jun 2007 22:08:55 GMT</pubDate></item><item><title><![CDATA[Reply to 100%ig Zuverlässige TCP&#x2F;IP Kommunikation... on Sun, 24 Jun 2007 00:31:54 GMT]]></title><description><![CDATA[<p>Ok, also du hast grundsätzlich 2 Fälle: &quot;ja&quot; -&gt; alles angekommen wie es sollte und &quot;nein&quot; -&gt; nicht angekommen.<br />
Mittels 2x Empfang quittieren (1x Empfang der Nachricht und 1x Empfand der Bestätigung) kannst du &quot;sicher ja&quot; feststellen. Wenn dabei allerdings etwas daneben geht heisst das nicht &quot;sicher nein&quot;, sondern eben &quot;unbekannt: ja oder nein&quot;.</p>
<p>Was du schreibst erinnert mich daran wie ich vor dem Problem stand gewisse Daten (Events aus einem Log) zu übertragen. Dabei war wichtig dass die Daten Clientseitig erst gelöscht werden wenn sie übertragen und am Server gespeichert wurden, und dass Daten nicht 2x am Server eingetragen wurden.<br />
Die Lösung: man verpasst jedem Datensatz Clientseitig eine unique ID (ich hab' einfach ne GUID genommen).<br />
Dann schickt man alle Datensätze an den Server. Der Server verwirft alle Datensätze mit einer bereits bekannten GUID, alle anderen werden abgespeichert. Wenn alles abgespeichert ist schickt der Server ein ACK an den Client, woraufhin der alle übertragenen Datensätze löscht.<br />
Wird der Vorgang unterbrochen werden einfach alle alten Datensätze bei der nächsten Übertragung nochmal mitgeschickt. Ob die dann schon eingetragen wurden oder nicht ist egal, da ja bereits eingetragene Datensätze anhand ihrere GUID erkannt und verworfen werden.</p>
<p>Vielleicht hilft dir das weiter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312535</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312535</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 24 Jun 2007 00:31:54 GMT</pubDate></item><item><title><![CDATA[Reply to 100%ig Zuverlässige TCP&#x2F;IP Kommunikation... on Sun, 24 Jun 2007 03:01:17 GMT]]></title><description><![CDATA[<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>Auf der Empfängerseite habe ich beim &quot;recv&quot; als Timeout auch 2 Sekunden angegeben!!!!<br />
So was passieren kann ist folgendes:</p>
</blockquote>
<p>2 Sekunden timeout erscheinen mir aber auch viel zu kurz für das beschriebene scenario. Ich würde da eher sowas wie 10 Sekunden erwarten. Der Timeout sollte ja shcon so gewählt werden das er im Normalbetrieb nicht erreicht wird. Und wie Du selber beschreibst sind 2 Skunden ja im Normalbetrieb durchaus möglich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312544</guid><dc:creator><![CDATA[loks]]></dc:creator><pubDate>Sun, 24 Jun 2007 03:01:17 GMT</pubDate></item><item><title><![CDATA[Reply to 100%ig Zuverlässige TCP&#x2F;IP Kommunikation... on Sun, 24 Jun 2007 07:00:38 GMT]]></title><description><![CDATA[<p>Christoph schrieb:</p>
<blockquote>
<p>TCP gibt jedem Paket eine Sequenz-Nummer um das beschriebene Problem zu verhindern. Wenn ich dich richtig verstanden habe hast du den Fall beschrieben, dass die Empfangs-Bestätigung zwar losgeschickt wurde, aber zu spät beim ursprünglichen Sender eintrifft. Dann geht der Sender davon aus, dass das Paket verloren gegangen ist und schickt es nochmal los. Der Empfänger kann dann bei TCP anhand der Sequenz-Nummer feststellen, dass er dieses Paket schon einmal erhalten hat.</p>
</blockquote>
<p>Das hilft mir aber nichts, da ich mich nicht auf ISO-Ebene 3 befinde, sondern auf ISO-Ebene 8!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312555</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312555</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Sun, 24 Jun 2007 07:00:38 GMT</pubDate></item><item><title><![CDATA[Reply to 100%ig Zuverlässige TCP&#x2F;IP Kommunikation... on Sun, 24 Jun 2007 07:02:13 GMT]]></title><description><![CDATA[<p>pale dog schrieb:</p>
<blockquote>
<p>eigentlich schon. angenommen der empfänger schliesst die verbindung nicht, weil z.b. das netzwerk so langsam ist und er noch auf die restlichen daten wartet. in dem fall (time out) schliesst der sender die verbindung (ein hartes closesockt == RST), was der empfänger seinerseits registrieren kann. passiert selbst das nicht (netzwerkausfall genau in dem augenblick) läuft der empfänger einerseits in einen timeout und verwirft alles bisher empfangenen fragmente.<br />
also alles, was von dem vorgegebenen schema abweicht (sender: connect-send, empfänger-close -&gt; graceful disconnect <strong>auf beiden seiten</strong>), gilt als misslungene übertragung.<br />
beim normalen verbindungsabbau müssen beiden TCP's mitspielen. das müsste eigentlich reichen... <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>
</blockquote>
<p>Und wie stelle ich jetzt fest ob die Verbindung &quot;richtig&quot; geschlossen wurde... ich hab doch nur ein FD_CLOSE!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312557</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312557</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Sun, 24 Jun 2007 07:02:13 GMT</pubDate></item><item><title><![CDATA[Reply to 100%ig Zuverlässige TCP&#x2F;IP Kommunikation... on Sun, 24 Jun 2007 07:05:01 GMT]]></title><description><![CDATA[<p>Zeus schrieb:</p>
<blockquote>
<p>Windos verwaltet die Pakete in eine Art &quot;Schieberegister&quot;.<br />
Schickt diese ab und wartet auf die Quittung vom Empfäneger.<br />
Wenn die Quittierung vollständig ist, wird das Schieberegister über seine Breite auf die nächste Pakete geschoben, sonst wird das wiederholt und nach n versuchen als failed eingestufft.</p>
</blockquote>
<p>Wie gesagt, das Betrifft nur die ISO-Ebene 3!!! Die Pakete kommen da ja auch wunderbar an! und werden eben im Treiber jetzt gepuffert bis sie jemand abholt!<br />
Ich bin aber mit meiner Anwendung auf Ebene 8 und hab jetzt das Problem dass die Daten womöglich gerade auf Ebene 3 eingetroffen sind ich auf Ebene 8 aber gleichzeitig in den Timeout reinlaufe. Somit wurden die Daten perfekt auf EBene 3 übertragen, aber ich hab sie nicht bekommen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312558</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312558</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Sun, 24 Jun 2007 07:05:01 GMT</pubDate></item><item><title><![CDATA[Reply to 100%ig Zuverlässige TCP&#x2F;IP Kommunikation... on Sun, 24 Jun 2007 07:09:59 GMT]]></title><description><![CDATA[<p>Hallo hustbaer!</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Ok, also du hast grundsätzlich 2 Fälle: &quot;ja&quot; -&gt; alles angekommen wie es sollte und &quot;nein&quot; -&gt; nicht angekommen.<br />
Mittels 2x Empfang quittieren (1x Empfang der Nachricht und 1x Empfand der Bestätigung) kannst du &quot;sicher ja&quot; feststellen. Wenn dabei allerdings etwas daneben geht heisst das nicht &quot;sicher nein&quot;, sondern eben &quot;unbekannt: ja oder nein&quot;.</p>
</blockquote>
<p>Endlich einer der mich versteht!</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Was du schreibst erinnert mich daran wie ich vor dem Problem stand gewisse Daten (Events aus einem Log) zu übertragen. Dabei war wichtig dass die Daten Clientseitig erst gelöscht werden wenn sie übertragen und am Server gespeichert wurden, und dass Daten nicht 2x am Server eingetragen wurden.<br />
Die Lösung: man verpasst jedem Datensatz Clientseitig eine unique ID (ich hab' einfach ne GUID genommen).<br />
Dann schickt man alle Datensätze an den Server. Der Server verwirft alle Datensätze mit einer bereits bekannten GUID, alle anderen werden abgespeichert.</p>
<p>Wenn alles abgespeichert ist schickt der Server ein ACK an den Client, woraufhin der alle übertragenen Datensätze löscht.</p>
<p>Wird der Vorgang unterbrochen werden einfach alle alten Datensätze bei der nächsten Übertragung nochmal mitgeschickt. Ob die dann schon eingetragen wurden oder nicht ist egal, da ja bereits eingetragene Datensätze anhand ihrere GUID erkannt und verworfen werden.</p>
<p>Vielleicht hilft dir das weiter.</p>
</blockquote>
<p>Das ist bisher auch die Lösung die ich mir vorstellen kann... leider ist das nicht so einfach mit einer eindeutigen ID... ich müsste mir ja auf der Server-Seite *alle* IDs merken und immer nachschlagen. Das ist etwas &quot;overpowered&quot;...</p>
<p>Sowas muss es doch (einfacher) geben!!! 2-Phase-Commit-Protokoll... ich hab bloß noch nichts gefunden wie man das auf TCP anwendet...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312560</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Sun, 24 Jun 2007 07:09:59 GMT</pubDate></item><item><title><![CDATA[Reply to 100%ig Zuverlässige TCP&#x2F;IP Kommunikation... on Sun, 24 Jun 2007 07:11:35 GMT]]></title><description><![CDATA[<p>loks schrieb:</p>
<blockquote>
<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>Auf der Empfängerseite habe ich beim &quot;recv&quot; als Timeout auch 2 Sekunden angegeben!!!!</p>
</blockquote>
<p>2 Sekunden timeout erscheinen mir aber auch viel zu kurz für das beschriebene scenario. Ich würde da eher sowas wie 10 Sekunden erwarten. Der Timeout sollte ja shcon so gewählt werden das er im Normalbetrieb nicht erreicht wird. Und wie Du selber beschreibst sind 2 Skunden ja im Normalbetrieb durchaus möglich.</p>
</blockquote>
<p>Die länge des Timeouts spielt bei &quot;zuverlässig&quot; *keine* Rolle! Entweder eine Übertragung ist zuverlässig oder nicht!<br />
Und mir geht ja gerade *nicht* um den Normalbetrieb!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312561</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312561</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Sun, 24 Jun 2007 07:11:35 GMT</pubDate></item><item><title><![CDATA[Reply to 100%ig Zuverlässige TCP&#x2F;IP Kommunikation... on Sun, 24 Jun 2007 07:40:13 GMT]]></title><description><![CDATA[<p>du musst dir nicht alle IDs merken, wenn du sequenzielle IDs für eine verbindung verwendest. dann kann der server nämlich pakete, die kleiner als die bereits abgearbeiteten sequenznummern sind, stickum als bereits erledigt bestätigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312567</guid><dc:creator><![CDATA[thordk]]></dc:creator><pubDate>Sun, 24 Jun 2007 07:40:13 GMT</pubDate></item><item><title><![CDATA[Reply to 100%ig Zuverlässige TCP&#x2F;IP Kommunikation... on Sun, 24 Jun 2007 08:51:15 GMT]]></title><description><![CDATA[<p>Jetzt hab ich nur noch das Problem, dass ich mehrere Clients haben kann... die wissen ja nix voneinandern, somit können diese auch keine &quot;forlaufende&quot; ID bilden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312597</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Sun, 24 Jun 2007 08:51:15 GMT</pubDate></item><item><title><![CDATA[Reply to 100%ig Zuverlässige TCP&#x2F;IP Kommunikation... on Sun, 24 Jun 2007 12:24:25 GMT]]></title><description><![CDATA[<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>loks schrieb:</p>
<blockquote>
<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>Auf der Empfängerseite habe ich beim &quot;recv&quot; als Timeout auch 2 Sekunden angegeben!!!!</p>
</blockquote>
<p>2 Sekunden timeout erscheinen mir aber auch viel zu kurz für das beschriebene scenario. Ich würde da eher sowas wie 10 Sekunden erwarten. Der Timeout sollte ja shcon so gewählt werden das er im Normalbetrieb nicht erreicht wird. Und wie Du selber beschreibst sind 2 Skunden ja im Normalbetrieb durchaus möglich.</p>
</blockquote>
<p>Die länge des Timeouts spielt bei &quot;zuverlässig&quot; *keine* Rolle! Entweder eine Übertragung ist zuverlässig oder nicht!<br />
Und mir geht ja gerade *nicht* um den Normalbetrieb!</p>
</blockquote>
<p>Unzuverlässig definiert sich doch darüber das Pakete verloren gehen. Ein timeout gibt dabei den Zeitpunkt an, ab dem ein Paket als verloren gilt wenn es bis dato nicht erschienen ist. Und 2 Sekunden erscheinen mir in em Zusammenhang als zu kurz, weil damit nach Deiner beschreibung ja Pakete als verloren betrachtet werden, die einfach nur &quot;zu langsam&quot; waren... Du sagst ja selber:</p>
<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>Wie gesagt, das Betrifft nur die ISO-Ebene 3!!! Die Pakete kommen da ja auch wunderbar an! und werden eben im Treiber jetzt gepuffert bis sie jemand abholt!<br />
Ich bin aber mit meiner Anwendung auf Ebene 8 und hab jetzt das Problem dass die Daten womöglich gerade auf Ebene 3 eingetroffen sind ich auf Ebene 8 aber gleichzeitig in den Timeout reinlaufe. Somit wurden die Daten perfekt auf EBene 3 übertragen, aber ich hab sie nicht bekommen...</p>
</blockquote>
<p>Demnach wird deine Übertragung unzuverlässig (Ebene 8 erkennt verlorene Pakete) obwohl diese eigentlich angekommen sein (liegen auf ebene 3). Daher meine Frage: Warum ein so kurzer timeout?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312696</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312696</guid><dc:creator><![CDATA[loks]]></dc:creator><pubDate>Sun, 24 Jun 2007 12:24:25 GMT</pubDate></item><item><title><![CDATA[Reply to 100%ig Zuverlässige TCP&#x2F;IP Kommunikation... on Sun, 24 Jun 2007 12:26:26 GMT]]></title><description><![CDATA[<p>Man könnte die Id an die MAC anhängen, somit muss jeder Client nur eine fortlaufende Nummer generieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312697</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312697</guid><dc:creator><![CDATA[----]]></dc:creator><pubDate>Sun, 24 Jun 2007 12:26:26 GMT</pubDate></item><item><title><![CDATA[Reply to 100%ig Zuverlässige TCP&#x2F;IP Kommunikation... on Sun, 24 Jun 2007 13:09:12 GMT]]></title><description><![CDATA[<p>loks schrieb:</p>
<blockquote>
<p>Warum ein so kurzer timeout?</p>
</blockquote>
<p>Auch wenn ich mein Timeout auf 10 Sec machen hat sich das Problem nicht gelöst... wenn das Kundennetzt es erst erlaubt nach 10 sec. die Daten auf Ebene 3 korrekt zu übertragen hab ich auch nix gewonnen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312714</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Sun, 24 Jun 2007 13:09:12 GMT</pubDate></item><item><title><![CDATA[Reply to 100%ig Zuverlässige TCP&#x2F;IP Kommunikation... on Sun, 24 Jun 2007 14:29:48 GMT]]></title><description><![CDATA[<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>Jetzt hab ich nur noch das Problem, dass ich mehrere Clients haben kann... die wissen ja nix voneinandern, somit können diese auch keine &quot;forlaufende&quot; ID bilden...</p>
</blockquote>
<p>der server kann ja anhand der 'sockaddr_in' (portnummer und ip adresse die der client benutzt) die clients unterscheiden. wenn z.b. auf einer client-maschine zwei instanzen der client-software eine verbindung zum server haben, kann dieser anhand der portnummern die clients unterscheiden, obwohl die ip-adressen gleich sind. <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/1312757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312757</guid><dc:creator><![CDATA[pale dog]]></dc:creator><pubDate>Sun, 24 Jun 2007 14:29:48 GMT</pubDate></item><item><title><![CDATA[Reply to 100%ig Zuverlässige TCP&#x2F;IP Kommunikation... on Sun, 24 Jun 2007 16:56:18 GMT]]></title><description><![CDATA[<p>Ein 100% kann es nicht geben. Wenn du eine Sequenznummer und ein Angekommen sendet musst du auf Clientseite wieder bestätigen das die Bestätigung angekommen ist.<br />
Solange aber der Socket offen ist kannst du dir immer sicher sein das dir TCP vieles abnimmt.<br />
Wenn die Daten bereits beim Empfänger sind dann kann der Sender schon wieder weiter machen. Der Empfänger kann zwar einen Timeout bekommen aber IMHO bekommt er das vom Treiber der den Socket steuert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312891</guid><dc:creator><![CDATA[Unix-Tom]]></dc:creator><pubDate>Sun, 24 Jun 2007 16:56:18 GMT</pubDate></item><item><title><![CDATA[Reply to 100%ig Zuverlässige TCP&#x2F;IP Kommunikation... on Mon, 25 Jun 2007 01:16:51 GMT]]></title><description><![CDATA[<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>Hallo hustbaer!</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Ok, also du hast grundsätzlich 2 Fälle: &quot;ja&quot; -&gt; alles angekommen wie es sollte und &quot;nein&quot; -&gt; nicht angekommen.<br />
Mittels 2x Empfang quittieren (1x Empfang der Nachricht und 1x Empfand der Bestätigung) kannst du &quot;sicher ja&quot; feststellen. Wenn dabei allerdings etwas daneben geht heisst das nicht &quot;sicher nein&quot;, sondern eben &quot;unbekannt: ja oder nein&quot;.</p>
</blockquote>
<p>Endlich einer der mich versteht!</p>
</blockquote>
<p>Hehe, ja, weil ich eben genau so ein Problem schon hatte <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>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Was du schreibst erinnert mich daran wie ich vor dem Problem stand gewisse Daten (Events aus einem Log) zu übertragen. Dabei war wichtig dass die Daten Clientseitig erst gelöscht werden wenn sie übertragen und am Server gespeichert wurden, und dass Daten nicht 2x am Server eingetragen wurden.<br />
Die Lösung: man verpasst jedem Datensatz Clientseitig eine unique ID (ich hab' einfach ne GUID genommen).<br />
Dann schickt man alle Datensätze an den Server. Der Server verwirft alle Datensätze mit einer bereits bekannten GUID, alle anderen werden abgespeichert.</p>
<p>Wenn alles abgespeichert ist schickt der Server ein ACK an den Client, woraufhin der alle übertragenen Datensätze löscht.</p>
<p>Wird der Vorgang unterbrochen werden einfach alle alten Datensätze bei der nächsten Übertragung nochmal mitgeschickt. Ob die dann schon eingetragen wurden oder nicht ist egal, da ja bereits eingetragene Datensätze anhand ihrere GUID erkannt und verworfen werden.</p>
<p>Vielleicht hilft dir das weiter.</p>
</blockquote>
<p>Das ist bisher auch die Lösung die ich mir vorstellen kann... leider ist das nicht so einfach mit einer eindeutigen ID... ich müsste mir ja auf der Server-Seite *alle* IDs merken und immer nachschlagen. Das ist etwas &quot;overpowered&quot;...</p>
<p>Sowas muss es doch (einfacher) geben!!! 2-Phase-Commit-Protokoll... ich hab bloß noch nichts gefunden wie man das auf TCP anwendet...</p>
</blockquote>
<p>Naja, du musst dir auf der Server Seite nur die IDs merken von Transaktionen von denen der Server nicht sicher sein kann dass der Client bereits weiss dass sie auch committed wurden, und dass der Client sie seinerseits als &quot;fertig&quot; markiert hat (bzw. einfach gelöscht hat).</p>
<p>Nachdem der Server eine Transaktion &quot;committed&quot; hat schickt er einfach zum Client &quot;Transaktion #1234 ist committed&quot;. Der Client kann nun seinerseits diese Transaktion löschen bzw. als &quot;fertig&quot; markieren, und _danach_ schickt er an den Server &quot;OK, habe Transaktion #1234 als fertig markiert&quot;. Sobald der Server das empfangen hat kann er die Daten über Transaktion #1234 löschen, da er sicher sein kann diese vom Client nicht nochmals geschickt zu bekommen.</p>
<p>Das einzige was hier nun passieren kann ist dass der Server eine Transaktion (die bereits committed ist) für einen Client noch gespeichert hat, der Client diese aber schon gelöscht hat (da die Verbindung unterbrochen wurde bevor der Client das &quot;OK, habe Transaktion #1234 als fertig markiert&quot; an den Server schicken konnte).<br />
Der Fall ist aber nicht weiter tragisch, das lässt sich einfach damit regeln dass bei jedem Verbindungsaufbau der Server die IDs der Transaktionen die bereits committed wurden an den Client schickt, und der Client diese dann auf seiner Seite löscht. Hat er sie schon gelöscht findet er sie nicht und ignoriert sie einfach, in dem Fall schickt er dann ein &quot;OK, habe Transaktion #1234 nicht gefunden, muss ich damals schon gelöscht haben&quot; an den Server, und dieser kann die Daten wiederum löschen.</p>
<p>Soetwas würde ich allerdings nur implementieren wenn das System nicht sowieso Daten über sämtliche Transaktionen irgendwo aufheben muss. Das Nachschlagen der IDs sehe ich nicht als Problem ansich, höchstens eben den Speicherplatz der dafür draufgeht, was aber eben nur ein Problem ist wenn nicht sowieso alles aufgehoben werden muss.<br />
Das Nachschlagen in einer kleinen Detailtabelle (bzw. einem &quot;Covering Index&quot;) mit nur Transaktions ID + Zustand sollte auf jeden Fall sehr schnell gehen - so eine GUID ist gerademal 16 Byte lang, mit Zustand und Overhead kommt das auf sagen wir mal 17-20 Byte pro Zeile - regt mich ehrlich gesagt nicht sonderlich auf. So viele Zeilen können das garnicht sein dass ein B-Baum da besonders tief werden könnte.<br />
Und wenn man statt GUIDs noch fortlaufende Nummern vergibt muss auch nur ein ganz kleiner Teil dieser Tabelle im Speicher gehalten werden, nämlich die IDs der letzten paar Tage.<br />
(Und wenn man die IDs Serverseitig vergibt sollte man auch mit 8 oder 10 Byte auskommen, was die Tabelle nochmal schmäler macht)</p>
<p>p.S.: über Timeouts oder die Details von TCP/IP muss (bzw. sollte oder noch besser: darf) man sich bei sowas überhaupt keine Gedanken machen. Man behandelt die TCP/IP Verbindung einfach als Verbindung die jederzeit abreissen kann, und wenn sie abreisst muss man davon ausgehen dass minimal garnix bis maximal alles was seit der letzten Bestätigung zur Gegenstelle geschickt wurde nicht angenommen ist. Dadurch erübrigt es sich auch darüber nachzudenken ob die Gegenstelle vielleicht abstürzen könnte oder den Strom verliert oder sonstwas -- wenn das Protokoll mit &quot;Verbindung kann jederzeit abreissen&quot; klarkommt sind diese Fälle alle automatisch mit abgedeckt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1313054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1313054</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 25 Jun 2007 01:16:51 GMT</pubDate></item></channel></rss>