<?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[Protokollentwicklung]]></title><description><![CDATA[<p>Ich möchte Dateien über das Internet versenden. Ich habe dazu einige Beiträge im Forum gefunden. Die idee mit der Protokollentwicklung ist mir recht sympatisch. Mein Problem ist jetzt nur, da TCP/IP via Datagram und nicht Virtual Circuit funktioniert. Nun meine Frage, wie kann ich die einzelnen Packte nummerieren, um sie anschliessend wieder in der richtigen Reihenfolge zusammen zustetzen? Ich habe mir überleget, den Stream manuell in einzelne Packete aufzuteilen und dann zu nummerieren, bloss ist die Grösse des Body ja von der des Headers abhängig, wodurch ein aufteilen des Streams in mehrere kleiner mit fixer Grösse auch problematisch ist, es sei den ich mache es so, dass ich vom kleinst möglichen Body ausgehen, aber dann ist die Ausnutzung wieder verschiessen. Hat jemand eine Idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/104322/protokollentwicklung</link><generator>RSS for Node</generator><lastBuildDate>Thu, 30 Jul 2026 06:12:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/104322.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 Mar 2005 12:02:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Protokollentwicklung on Fri, 18 Mar 2005 12:02:26 GMT]]></title><description><![CDATA[<p>Ich möchte Dateien über das Internet versenden. Ich habe dazu einige Beiträge im Forum gefunden. Die idee mit der Protokollentwicklung ist mir recht sympatisch. Mein Problem ist jetzt nur, da TCP/IP via Datagram und nicht Virtual Circuit funktioniert. Nun meine Frage, wie kann ich die einzelnen Packte nummerieren, um sie anschliessend wieder in der richtigen Reihenfolge zusammen zustetzen? Ich habe mir überleget, den Stream manuell in einzelne Packete aufzuteilen und dann zu nummerieren, bloss ist die Grösse des Body ja von der des Headers abhängig, wodurch ein aufteilen des Streams in mehrere kleiner mit fixer Grösse auch problematisch ist, es sei den ich mache es so, dass ich vom kleinst möglichen Body ausgehen, aber dann ist die Ausnutzung wieder verschiessen. Hat jemand eine Idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/747447</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/747447</guid><dc:creator><![CDATA[wedmer]]></dc:creator><pubDate>Fri, 18 Mar 2005 12:02:26 GMT</pubDate></item><item><title><![CDATA[Reply to Protokollentwicklung on Fri, 18 Mar 2005 12:07:47 GMT]]></title><description><![CDATA[<p>Ich sehe dein Problem nicht ganz. Du gibst die Grösse des Pakets in deinem Protokoll an nehme ich mal an oder?</p>
<p>-junix</p>
]]></description><link>https://www.c-plusplus.net/forum/post/747457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/747457</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Fri, 18 Mar 2005 12:07:47 GMT</pubDate></item><item><title><![CDATA[Reply to Protokollentwicklung on Fri, 18 Mar 2005 14:21:59 GMT]]></title><description><![CDATA[<p>Ich versende die Daten von einem ClientSocket an einen ServerSocket. Wenn ich das richtig verstanden habe, ist das Protokoll, das die beiden verwenden IP v. 4, oder? unabhängig von dem was ich mache. Bei IP v.4 kann die maximale Paket grösse 65'535 Byte betragen. Also muss doch der ClientSocket den ganzen Stream in Pakete aufteilen, welche dann an den Server gesendet werden, da TCP/IP auf Datagram basiert, ist nicht garantiert, dass die Pakete in der richtigen Reihenfolge ankommen. Beim ServerSocket wird ja bei jedem ankommenden Paket ein OnReadClient Event ausgelöst, oder? Also muss ich nun die Pakte, falls sie einen unterschliedlichen Weg genommen haben und deshalb nicht mehr in der richtigen Reihenfolge angekommen sind, wieder richtig zusammensetzten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/747593</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/747593</guid><dc:creator><![CDATA[wedmer]]></dc:creator><pubDate>Fri, 18 Mar 2005 14:21:59 GMT</pubDate></item><item><title><![CDATA[Reply to Protokollentwicklung on Fri, 18 Mar 2005 14:26:27 GMT]]></title><description><![CDATA[<p>wedmer schrieb:</p>
<blockquote>
<p>da TCP/IP auf Datagram basiert, ist nicht garantiert, dass die Pakete in der richtigen Reihenfolge ankommen.</p>
</blockquote>
<p>nö, aber das regelt tcp schon selber. musste dir keine gedanken drum machen. deiner anwendung gehen keine daten verloren (es sei denn die verbindung bricht ab) und es wird auch nix vertauscht. ist fast so zuverlässig wie das speichern auf'n datenträger</p>
]]></description><link>https://www.c-plusplus.net/forum/post/747600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/747600</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Fri, 18 Mar 2005 14:26:27 GMT</pubDate></item><item><title><![CDATA[Reply to Protokollentwicklung on Fri, 18 Mar 2005 15:08:02 GMT]]></title><description><![CDATA[<p>Ich hab das gleiche Problem wie du Wedmer !<br />
Hab schon etwas vorgegriffen und werde meinen Code dies Nacht posten wenn ich etwas weiter gemacht habe. Das Empfangen hakelt bei mir noch da ich keine while Schleife zum empfangen in einem Event verwenden darf. Wenn du willst können wir das Problem zusammen lösen.</p>
<p>David</p>
<p>Edit: wie kommst du drauf das TCP ein Datagramm ist ? das ist IP und UDP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/747635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/747635</guid><dc:creator><![CDATA[Zero01]]></dc:creator><pubDate>Fri, 18 Mar 2005 15:08:02 GMT</pubDate></item><item><title><![CDATA[Reply to Protokollentwicklung on Fri, 18 Mar 2005 15:21:02 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/3162">@net</a></p>
<blockquote>
<p>nö, aber das regelt tcp schon selber</p>
</blockquote>
<p>das würde ja bedeuten, dass der ClientSocket meinen Stream von sagen wir 10MB auf die einzelnen Pakete aufteilt, die anschliessend auf den Weg schickt, der ServerSocket die Pakete wieder in der richtigen Reihenfolge zusammensetzt und erst dann den OnClientSocketRead Event auslöst? tuts aber nicht.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6988">@Zero01</a> ja können wir gerne versuchen.</p>
<blockquote>
<p>wie kommst du drauf das TCP ein Datagramm ist ? das ist IP und UDP</p>
</blockquote>
<p>meines wissen gibt es die Paket und die Leitungsvermittlung. Bei der Paketvermittlung wird weiter in Datagramme und Virtual Circuit unterteilt und ich dachte immer TCP/IP auf dem prinzip der Datagramme funktioniert, sprich die Pakete können via unterschiedliche Wege zum Ziel gelangen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/747645</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/747645</guid><dc:creator><![CDATA[wedmer]]></dc:creator><pubDate>Fri, 18 Mar 2005 15:21:02 GMT</pubDate></item><item><title><![CDATA[Reply to Protokollentwicklung on Fri, 18 Mar 2005 15:37:33 GMT]]></title><description><![CDATA[<p>Um die Reihenfolge kümmert sich TCP, bei UDP müsste man sich einen Mechanismus zurechtbasteln der die Pakete nach der Reihenfolge sortiert und zusammen setzt.<br />
Ich hoffe ich komme Heute Nacht weiter, bis später.........</p>
<p>David</p>
]]></description><link>https://www.c-plusplus.net/forum/post/747661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/747661</guid><dc:creator><![CDATA[Zero01]]></dc:creator><pubDate>Fri, 18 Mar 2005 15:37:33 GMT</pubDate></item><item><title><![CDATA[Reply to Protokollentwicklung on Fri, 18 Mar 2005 15:52:56 GMT]]></title><description><![CDATA[<p>wedmer schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/3162">@net</a></p>
<blockquote>
<p>nö, aber das regelt tcp schon selber</p>
</blockquote>
<p>das würde ja bedeuten, dass der ClientSocket meinen Stream von sagen wir 10MB auf die einzelnen Pakete aufteilt, die anschliessend auf den Weg schickt, der ServerSocket die Pakete wieder in der richtigen Reihenfolge zusammensetzt und erst dann den OnClientSocketRead Event auslöst? tuts aber nicht.</p>
</blockquote>
<p>musses aber. das ganze internet verlässt sich drauf. bestimmt machste irgendwas falsch mit dem socket. man muss z.b. immer die rückgabewerte der send()- und recv()-funktionen beachten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/747674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/747674</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Fri, 18 Mar 2005 15:52:56 GMT</pubDate></item><item><title><![CDATA[Reply to Protokollentwicklung on Sat, 19 Mar 2005 04:43:22 GMT]]></title><description><![CDATA[<p>Bis jetzt hab ich folgendes:</p>
<p><strong>Senden</strong></p>
<pre><code class="language-cpp">char buf[1024];
int c,b;

   TFileStream *out = new TFileStream(Form1-&gt;OpenDialog1-&gt;FileName, fmOpenRead);
   out-&gt;Seek(0,soFromBeginning);

      Form3-&gt;Label4-&gt;Caption = &quot;Uploading...&quot;;

     do
     {
         b = out-&gt;Read(buf,sizeof(buf));
         c = Form1-&gt;ClientSocket1-&gt;Socket-&gt;SendBuf(buf,b);

        while(c == -1)
        {
         c = Form1-&gt;ClientSocket1-&gt;Socket-&gt;SendBuf(buf,b);
        }
    }
     while(b == sizeof(buf));
     delete out;
</code></pre>
<pre><code class="language-cpp">void __fastcall TForm1::FileTransfer1Click(TObject *Sender)
{

   int i;
   int Size,lenght;
   char Buff[1024];

   if (OpenDialog1-&gt;Execute())
   {

     String dateipfad = OpenDialog1-&gt;FileName;
     String dateiname;

     //--------Datei größe
     HANDLE file;
     int size;
     file = CreateFile(dateipfad.c_str(), GENERIC_READ, NULL, NULL, OPEN_EXISTING, NULL, NULL);
     size = GetFileSize(file, NULL);
     CloseHandle(file);

     Form3-&gt;Label6-&gt;Caption = size;

     i = OpenDialog1-&gt;FileName.LastDelimiter(&quot;\\&quot;);
     Form3-&gt;Label3-&gt;Caption = dateipfad.SubString(i + 1,dateipfad.Length());
     dateiname = dateipfad.SubString(i + 1,dateipfad.Length());

     String query = &quot;File:&quot;+ dateiname + &quot;:&quot; + String(size);

     strcpy(Buff,query.c_str());
     Size = sizeof(Buff);
     lenght = strlen(Buff);

     AuthUDP1-&gt;RemoteHost = remote_ip;
     AuthUDP1-&gt;SendBuffer(Buff,Size,lenght);

     Form3-&gt;Show();

   }

}
</code></pre>
<p>Das Empfangen klappt leider noch nicht 100% <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> (Poste ich später)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/748031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/748031</guid><dc:creator><![CDATA[Zero01]]></dc:creator><pubDate>Sat, 19 Mar 2005 04:43:22 GMT</pubDate></item><item><title><![CDATA[Reply to Protokollentwicklung on Sat, 19 Mar 2005 10:16:20 GMT]]></title><description><![CDATA[<p>Ouch... Ich seh da schon was:</p>
<p>1. diese while sendefehler... da könnte man a) eine do..while draus machen, zweitens baust du dir da im dümmsten Fall ne endlosschleife, wenn was mit dem Socket krumm läuft...</p>
<p>2. Net hat recht. TCP sorgt selber für die Numerierung und das Zusammensetzen der Pakete... Da brauchste keinen Mechanismus für. Bei UDP hingegen schon. Nur ist es witzlos UDP zu nehmen, wenn man nachher eh alle Pakete braucht. UDP macht dann sinn, wenn die Wichtigkeit, dass das Packet angekommen ist nicht wirklich hoch ist -&gt; Onlinegames</p>
<p>Dann brauchste auch nur nen schnellen Mechanismus der sich merkt welches die letzte Paketnummer war und alle die eintrudeln und eine tiefere Nummer haben verwirft.</p>
<p>-junix</p>
]]></description><link>https://www.c-plusplus.net/forum/post/748096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/748096</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Sat, 19 Mar 2005 10:16:20 GMT</pubDate></item><item><title><![CDATA[Reply to Protokollentwicklung on Sat, 19 Mar 2005 11:21:05 GMT]]></title><description><![CDATA[<p>junix schrieb:</p>
<blockquote>
<p>UDP macht dann sinn, wenn die Wichtigkeit, dass das Packet angekommen ist nicht wirklich hoch ist -&gt; Onlinegames</p>
</blockquote>
<p>Naja, so stimmt das nicht ganz.<br />
Weil wenn meim spielen (online) ein Paket fehlt, kommts zu diesen Lags.</p>
<p>Wird UDP auch nicht für Dinge verwendet die verbindungslos sein sollen?<br />
Beispiel:<br />
Counterstrike, wenn du da LAN Server suchen willst (und im Lan gibts kein Masterserver), wird doch immer nen UDP Paket versendet und aktive Server antworten drauf. So das man schnell IP's von Server hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/748135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/748135</guid><dc:creator><![CDATA[DJ BlackEagle]]></dc:creator><pubDate>Sat, 19 Mar 2005 11:21:05 GMT</pubDate></item><item><title><![CDATA[Reply to Protokollentwicklung on Sat, 19 Mar 2005 18:46:19 GMT]]></title><description><![CDATA[<p>Jop, TCP ist verbindungsorientiert und UDP verbindungslos.<br />
Online Spiele leben von UDP, das ist definitiv sicher.<br />
Ja, im LAN werden via Broadcast Server ermittelt.</p>
<p>Wie kommt ihr darauf einen Filetransfer auf UDP aufzubauen wenn man TCP zur Verfügung hat ? Das schreit ja förmlich danach <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="😉"
    /> Ich informiere jediglich den Empfänger über UDP das eine Datei mit der Größe X von User X hochgeladen werden soll und nach Bestätigung öffne ich die TCP Verbindung zum Empfänger. Also wird UDP als reine Authentifizierung und Steuerung verwendet. Interessant wäre jetzt einen Mechanismus auszutüfteln wie man von mehrenen Clients Dateien empfangen kann <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Momentan hab ich ne StringListe wo IP und Filename + Filesize drin stehen, man müsste es nur hinbekommen das für jeden File ein expliziter Filestream geöffnet wird und wenn die Empfangenen Bytes &gt;= der Filesize sind wird er freigegeben. Hat jemand ne bessere Idee ? Multithreading?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/748417</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/748417</guid><dc:creator><![CDATA[Zero01]]></dc:creator><pubDate>Sat, 19 Mar 2005 18:46:19 GMT</pubDate></item><item><title><![CDATA[Reply to Protokollentwicklung on Sat, 19 Mar 2005 19:24:50 GMT]]></title><description><![CDATA[<p>UDP: Ja aber bei UDP erfolgt doch auch kein Acknowledge oder? KLar kommt es zu lags... aber wenn bei 1000 Paketen / s 1 verloren geht ist das nicht die Welt.</p>
<p>Äh apropos Mechanismus wo jeder das zu empfangen hat: War da nicht was mit der Broadcast-Adresse die man sich aus der Netzmaske ausrechnen kann?</p>
<p>-junix</p>
]]></description><link>https://www.c-plusplus.net/forum/post/748458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/748458</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Sat, 19 Mar 2005 19:24:50 GMT</pubDate></item><item><title><![CDATA[Reply to Protokollentwicklung on Sat, 19 Mar 2005 20:27:17 GMT]]></title><description><![CDATA[<p>junix schrieb:</p>
<blockquote>
<p>Äh apropos Mechanismus wo jeder das zu empfangen hat: War da nicht was mit der Broadcast-Adresse die man sich aus der Netzmaske ausrechnen kann?<br />
-junix</p>
</blockquote>
<p>Ja das Stimmt. Broadcast gehen aber nur im LAN (wenn ein Router,Switch das nicht filtert), im Internet wird das gefiltert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/748500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/748500</guid><dc:creator><![CDATA[DJ BlackEagle]]></dc:creator><pubDate>Sat, 19 Mar 2005 20:27:17 GMT</pubDate></item><item><title><![CDATA[Reply to Protokollentwicklung on Sat, 19 Mar 2005 20:38:29 GMT]]></title><description><![CDATA[<p>DJ BlackEagle schrieb:</p>
<blockquote>
<p>Broadcast gehen aber nur im LAN (wenn ein Router,Switch das nicht filtert), im Internet wird das gefiltert.</p>
</blockquote>
<p>wär ja auch übel wenn broadcasts durchkämen. dann könnte jeder popelige teilnehmer das internet lahmlegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/748515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/748515</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Sat, 19 Mar 2005 20:38:29 GMT</pubDate></item><item><title><![CDATA[Reply to Protokollentwicklung on Sat, 19 Mar 2005 20:41:25 GMT]]></title><description><![CDATA[<p>Klar doch (o;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/748520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/748520</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Sat, 19 Mar 2005 20:41:25 GMT</pubDate></item><item><title><![CDATA[Reply to Protokollentwicklung on Sat, 19 Mar 2005 21:43:36 GMT]]></title><description><![CDATA[<p>junix schrieb:</p>
<blockquote>
<p>UDP: Ja aber bei UDP erfolgt doch auch kein Acknowledge oder? KLar kommt es zu lags... aber wenn bei 1000 Paketen / s 1 verloren geht ist das nicht die Welt.</p>
<p>Äh apropos Mechanismus wo jeder das zu empfangen hat: War da nicht was mit der Broadcast-Adresse die man sich aus der Netzmaske ausrechnen kann?</p>
<p>-junix</p>
</blockquote>
<p>Nein, mir geht es um einen Datei Transfer wo ein Server von mehreren anderen Clients gleichzeitig ein File annehmen können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/748580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/748580</guid><dc:creator><![CDATA[Zero01]]></dc:creator><pubDate>Sat, 19 Mar 2005 21:43:36 GMT</pubDate></item><item><title><![CDATA[Reply to Protokollentwicklung on Sat, 19 Mar 2005 21:54:03 GMT]]></title><description><![CDATA[<p>Zero01 schrieb:</p>
<blockquote>
<p>Nein, mir geht es um einen Datei Transfer wo ein Server von mehreren anderen Clients gleichzeitig ein File annehmen können.</p>
</blockquote>
<p>das geht auch. jeder teilnehmer kann eine vielzahl von verbindungen quasi-parallel bedienen. für dateitransfer würde ich aber immer tcp und nicht udp nehmen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/748594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/748594</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Sat, 19 Mar 2005 21:54:03 GMT</pubDate></item><item><title><![CDATA[Reply to Protokollentwicklung on Sun, 20 Mar 2005 00:30:39 GMT]]></title><description><![CDATA[<p>So habs nun auch geschaft die Dateien erfolgreich zu versenden und empfangen. Mein ursprüngliches Problem war, dass ich wärend einer langweiligen Vorlesung programmiert habe und um das ganze zu testen, mit meinem PC zuhause kommuniziert hatte und meine Firewall verrückt spielte, weiss zwar nicht wieso, aber ist eh ein scheiss Ding. Ich habe es nun so gelösst, dass ich zuerst vom Client aus die Grösse der Datei als String an den Server sende, dann am Client mitteile, dass dieser bereit ist und lese anschliessend die Daten ein.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6988">@Zero01</a> hast du das mit dem empfangen nun auch hin gekriegt? Ich habe im Post von dir über <strong>neues Fenster zur Laufzeit erstellen</strong> gelesen, dass dein Chat Progi ein Webcam Support besitzt. Nun wollte ich dich noch fragen, wie du die Bilder der Webcam ausliest?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/748663</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/748663</guid><dc:creator><![CDATA[wedmer]]></dc:creator><pubDate>Sun, 20 Mar 2005 00:30:39 GMT</pubDate></item><item><title><![CDATA[Reply to Protokollentwicklung on Sun, 20 Mar 2005 14:08:13 GMT]]></title><description><![CDATA[<p>Habe soeben in der FAQ das Beispiel Progi zur Webcam gefunden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/748884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/748884</guid><dc:creator><![CDATA[wedmer]]></dc:creator><pubDate>Sun, 20 Mar 2005 14:08:13 GMT</pubDate></item><item><title><![CDATA[Reply to Protokollentwicklung on Sun, 20 Mar 2005 14:59:23 GMT]]></title><description><![CDATA[<p>Jop ,hab gestern Nacht Filme mit 800 Mb und mehr vom Rechner zum Laptop gesendet.<br />
Ich habe das Problem das beim Client sowie Server die CPU Auslastung auf 100% springt und alles bis auf den File Transfer blockiert wird. Ich bastel noch etwas und poste den code später</p>
<p>@ Net:</p>
<p>Zero01 schrieb:</p>
<blockquote>
<p>Wie kommt ihr darauf einen Filetransfer auf UDP aufzubauen wenn man TCP zur Verfügung hat ? Das schreit ja förmlich danach <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>
</blockquote>
<p>Ich würde mich hüten mit UDP Dateien zu versenden. ich benutze UDP für den Chat und zur Steuerung des Client/Server Sockets <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 />
Beispiel: FTP Port 20 Authent und Control und Port 21 Daten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/748906</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/748906</guid><dc:creator><![CDATA[Zero01]]></dc:creator><pubDate>Sun, 20 Mar 2005 14:59:23 GMT</pubDate></item><item><title><![CDATA[Reply to Protokollentwicklung on Sun, 20 Mar 2005 20:22:48 GMT]]></title><description><![CDATA[<p>Hatte das gleiche Problem wie du Zero01. Beim Server, welcher die Daten empfängt, konnte ich es einfach lösen indem ich. Ich hatte eine Schleife in der er gefangen war, bis er alle Daten erhalten hatte. Habe jetzt die nötigen Variabeln in der Klasse als Privat deklariert und die Schleife herausgenommen, jetzt wird die Funktion OnClientRead einfach mehrmals aufgerufen, bis er alle Daten hat und speichert das File anschliessend ab. Bei Client, welcher die Datei sendet habe ich es noch nicht gelösst. Wenn ich etwas Zeit habe werde ich es mal mit einem Timer versuchen, damit ich ihn nicht in der Schleife hangen lasse, bis alles raus ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/749078</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/749078</guid><dc:creator><![CDATA[wedmer]]></dc:creator><pubDate>Sun, 20 Mar 2005 20:22:48 GMT</pubDate></item><item><title><![CDATA[Reply to Protokollentwicklung on Sun, 20 Mar 2005 21:27:05 GMT]]></title><description><![CDATA[<p>Die Lösung über den Timer hört sich Interessant an da man noch nen Slider einbauen kann wo man die geschwindigkeit regulieren kann. In einem event darf man ohnehin keine Schleife verwenden. Momentan habe ich das Problem das ich den FileStream global deklariert habe und ihn nicht freigeben kann. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> kein Plan wie ich die initialisierung des Filestreams ausserhalb des onRead Events machen soll und ihn wieder freizugeben. Perfekt wäre noch das für jede IP von der Dateien übertragen werden einen expliziten FileStream anzulegen. Ich habe beim Server eine TStringListe wo IP + Dateiname + Dateigröße von jedem Client gespeichert wird.<br />
Eine weitere StringListe speichert die übertragenen bytes und wird pro OnRead entsprechend hochgezählt um zu erkennen wann der File zu ende geladen ist um den Stream wieder freizugeben.</p>
<p>Weiß da jemand Rat wie das zu realisieren ist oder bin ich auf dem richtigen Weg <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Aber die Sache mit dem globalen Deklarieren und nicht mehr freigeben können nervt total, da muss es doch ne andere Möglichkeit geben wie man explizit für jede Client IP einen Filestream vor dem Senden anlegt und danch wieder freigibt ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/749126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/749126</guid><dc:creator><![CDATA[Zero01]]></dc:creator><pubDate>Sun, 20 Mar 2005 21:27:05 GMT</pubDate></item><item><title><![CDATA[Reply to Protokollentwicklung on Mon, 21 Mar 2005 22:01:02 GMT]]></title><description><![CDATA[<p>Hi Zero01,<br />
Ich hatte mit dem FileStream auch Probleme. Hatte es dann mal mit einem MemoryStream versucht und es hat geklappt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/749884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/749884</guid><dc:creator><![CDATA[wedmer]]></dc:creator><pubDate>Mon, 21 Mar 2005 22:01:02 GMT</pubDate></item><item><title><![CDATA[Reply to Protokollentwicklung on Tue, 22 Mar 2005 00:13:14 GMT]]></title><description><![CDATA[<p>Ok, ich versuche es jetzt auch mal mit dem Memory Stream. Würdest du mir dabei helfen ?<br />
Bis jetzt habe ich folgendes:</p>
<p><strong>Global:</strong><br />
TMemoryStream * Stream = new TMemoryStream();</p>
<p><strong>Senden</strong></p>
<pre><code class="language-cpp">TMemoryStream *mem = new TMemoryStream();
  mem-&gt;LoadFromFile(Form1-&gt;OpenDialog1-&gt;FileName);
  mem-&gt;Seek(0,0);
  Form1-&gt;ClientSocket1-&gt;Socket-&gt;SendStream(mem);
  delete mem;
</code></pre>
<p><strong>Empfangen</strong> <strong>OnReadEvent</strong></p>
<pre><code class="language-cpp">int Buffer = 1024;
  int filesize = StrToInt(FileSize(filelist-&gt;Values[Socket-&gt;RemoteAddress]));
  String filename = FileName(filelist-&gt;Values[Socket-&gt;RemoteAddress]);

  BYTE *Buffer_BYTEp = new BYTE[Buffer];
  Stream-&gt;Position = Stream-&gt;Size;

  Socket-&gt;ReceiveBuf(Buffer_BYTEp, Buffer);
  Stream-&gt;Write(Buffer_BYTEp, Buffer);

  delete [] Buffer_BYTEp;

  if (Stream-&gt;Size == filesize)
  {
   Stream-&gt;SaveToFile(Form2-&gt;Label1-&gt;Caption + &quot;\\&quot; + filename);
   delete Stream;
  }
</code></pre>
<p>Wie hast du das Empfangen gelöst ? Momentan wird das Programm so übel abgeschossen das man noch nicht mal mehr ne Fehlerausgabe hat <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
So wie es aussieht steigt er schon beim Senden aus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/749943</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/749943</guid><dc:creator><![CDATA[Zero01]]></dc:creator><pubDate>Tue, 22 Mar 2005 00:13:14 GMT</pubDate></item><item><title><![CDATA[Reply to Protokollentwicklung on Tue, 22 Mar 2005 07:16:01 GMT]]></title><description><![CDATA[<p>Debuggen und schauen wo genau der Abschuss passiert wär doch mal ne Option?</p>
<p>-junix</p>
]]></description><link>https://www.c-plusplus.net/forum/post/749985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/749985</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Tue, 22 Mar 2005 07:16:01 GMT</pubDate></item></channel></rss>