<?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[Netzwerkprogrammierung]]></title><description><![CDATA[<p>hallo</p>
<p>hab folgendes problem , ich weiß nicht wie ich große daten übers netzwerk sende.<br />
Ich hab die Daten in Pakete aufgeteiilt jedoch entsteht beim Senden eine Latenz die bei zunehmender Paketzahl fast zum Stillstand führt. Dies geschieht schon bei mehr als 8 Paketen der maximalen größe von 100 byte.</p>
<p>ich habe mal die sender und empfänger codes zusammengefasst und hofffe jemand kann helfen.<br />
Senden Teil:</p>
<pre><code class="language-cpp">for(i=0;i&lt;Container.count;i++)
          {
          socket_nummer = socket(AF_INET, SOCK_STREAM, 0);
          result = connect(socket_nummer, (struct sockaddr *)&amp;adresse, laenge);
          if(result!= -1)
	     {
             send[3]=2; /* ist ein char[4] */
            /* Die ersten 4 Bytes leiten das senden von den nächsten 100 ein */
             write(socket_nummer, send, 4);
	     write(socket_nummer, objekt MitMax100Bytes,100 );
	     }
          close(socket_nummer);
          }
</code></pre>
<p>Empfänger Teil:</p>
<pre><code class="language-cpp">while (1)
     {
     fflush(stdout);
     client_socket = 
        accept(server_socket, (struct sockaddr *)&amp;clientinfo, &amp;laenge);
     read(client_socket,Data,4);

     switch( Data[3] )
     {
     case 0: ... break;
     case 1:... break;
     case 2:
     read(client_socket,getLineData,128);
     /* hier findet noch eine kleine initialisierung der empfangenen daten */
     /* und hier werden noch in einer for schleife die daten analysiert und      gezeichnet */
     close(client_socket);
     break;
     }/*Switch close */
   }/*While close */
}
</code></pre>
<p>Habe auch schon versucht die anzahl der zu sendenen Bytepakete mitzusenden und &quot;connect(socket_nummer,...&quot; nicht immer aufgerufen. Auf der Empfängerseite hab ich dann versucht dies in einer schleife mit read(...) zu empfangen was jedoch dazu geführt hat dass ich nur das erste paket bekommen habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/188498/netzwerkprogrammierung</link><generator>RSS for Node</generator><lastBuildDate>Wed, 01 Jul 2026 12:05:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/188498.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 01 Aug 2007 06:26:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Netzwerkprogrammierung on Wed, 01 Aug 2007 06:26:34 GMT]]></title><description><![CDATA[<p>hallo</p>
<p>hab folgendes problem , ich weiß nicht wie ich große daten übers netzwerk sende.<br />
Ich hab die Daten in Pakete aufgeteiilt jedoch entsteht beim Senden eine Latenz die bei zunehmender Paketzahl fast zum Stillstand führt. Dies geschieht schon bei mehr als 8 Paketen der maximalen größe von 100 byte.</p>
<p>ich habe mal die sender und empfänger codes zusammengefasst und hofffe jemand kann helfen.<br />
Senden Teil:</p>
<pre><code class="language-cpp">for(i=0;i&lt;Container.count;i++)
          {
          socket_nummer = socket(AF_INET, SOCK_STREAM, 0);
          result = connect(socket_nummer, (struct sockaddr *)&amp;adresse, laenge);
          if(result!= -1)
	     {
             send[3]=2; /* ist ein char[4] */
            /* Die ersten 4 Bytes leiten das senden von den nächsten 100 ein */
             write(socket_nummer, send, 4);
	     write(socket_nummer, objekt MitMax100Bytes,100 );
	     }
          close(socket_nummer);
          }
</code></pre>
<p>Empfänger Teil:</p>
<pre><code class="language-cpp">while (1)
     {
     fflush(stdout);
     client_socket = 
        accept(server_socket, (struct sockaddr *)&amp;clientinfo, &amp;laenge);
     read(client_socket,Data,4);

     switch( Data[3] )
     {
     case 0: ... break;
     case 1:... break;
     case 2:
     read(client_socket,getLineData,128);
     /* hier findet noch eine kleine initialisierung der empfangenen daten */
     /* und hier werden noch in einer for schleife die daten analysiert und      gezeichnet */
     close(client_socket);
     break;
     }/*Switch close */
   }/*While close */
}
</code></pre>
<p>Habe auch schon versucht die anzahl der zu sendenen Bytepakete mitzusenden und &quot;connect(socket_nummer,...&quot; nicht immer aufgerufen. Auf der Empfängerseite hab ich dann versucht dies in einer schleife mit read(...) zu empfangen was jedoch dazu geführt hat dass ich nur das erste paket bekommen habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336246</guid><dc:creator><![CDATA[minxno]]></dc:creator><pubDate>Wed, 01 Aug 2007 06:26:34 GMT</pubDate></item><item><title><![CDATA[Reply to Netzwerkprogrammierung on Wed, 01 Aug 2007 08:07:10 GMT]]></title><description><![CDATA[<p>minxno schrieb:</p>
<blockquote>
<p>hallo<br />
Ich hab die Daten in Pakete aufgeteiilt jedoch entsteht beim Senden eine Latenz die bei zunehmender Paketzahl fast zum Stillstand führt. Dies geschieht schon bei mehr als 8 Paketen der maximalen größe von 100 byte.</p>
</blockquote>
<p>Geschieht das auf der Sender oder Empfängerseite? Ich würde das aufsplitten der Paktete einfach den Verwendeten Protokollen überlassen (sofern dies das übernehmen). Wenn du eine TCP/IP Verbindung aufbaust, dann brauchst du dich nicht darum zu kümmern. Die Protokolle zerlegen die Daten, teilen diese auf meherere Pakete auf und setzen sie anschließend beim Empfänger wieder zusammen. Sprich: sende alles was du hast aufeinmal.</p>
<pre><code class="language-cpp">//////////////////////////////////////////////////////////
// Sender
const int groesse = 10000000000;
char daten[groesse];

FuelleDaten(daten, Paketgroesse); // füllt das Array mit irgendwas wichtigem

//...

socket_nummer = socket(AF_INET, SOCK_STREAM, 0);
result = connect(socket_nummer, (struct sockaddr *)&amp;adresse, laenge);
if(result!= -1)
{
    int gesendeteBytes = send(socket_nummer, daten, groesse );   // alles &quot;aufeinmal&quot; weg
}

//////////////////////////////////////////////////////////
//Empfänger

// Socekterstellung spar ich mir hier 

const int groesse = 10000000000;
int empfangeneBytes = 0;
char daten[groesse];

do
{
    empfangeneBytes = recv(socket, daten, groess);

    SpeichereDatenWoanders(daten, empfangeneBytes);    

}while(empfangeneBytes != 0);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1336288</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336288</guid><dc:creator><![CDATA[Chris++ 0]]></dc:creator><pubDate>Wed, 01 Aug 2007 08:07:10 GMT</pubDate></item><item><title><![CDATA[Reply to Netzwerkprogrammierung on Wed, 01 Aug 2007 08:17:46 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/29">@Chris</a>++</p>
<p>Danke erstmal für die Antwort. Hab das so wie du es beschreibst auch vorher genau so versucht was dazu führte dass das Paket verloren ging.. Hatte zuvor 40k Daten gesendet und es ging nicht, dabei hatte ich es genauso gemacht wie du es beschrieben hast. Hab dan was über ne maximale Paketgröße gelesen und wollte alles dann selber aufteilen.</p>
<p>Das Aufteilen der Pakete muss aber sowieso schon im Programm bleiben da die Pakete Teil des Programmimplementierung sind..</p>
<p>Habe gerade den &quot; möglichen Fehler&quot; woanders lokalisiert..<br />
Und zwar hatte ich die Warteschleife auf 3 gesetzt</p>
<pre><code class="language-cpp">listen(server_socket, 3);
</code></pre>
<p>Wo ich die jetzt auf 8192 erweitert habe gibts diese sichtbare Latenz nicht mehr und ich habe schon getestet über 30 Pakete problemlos senden können. Denke beliebig viele werden dann auch gehen.<br />
Meine Tests verlaufen zur Zeit nur über localhost mit einem Server und Klient Thread weswegen ich mir noch die übriggebliebene kleine Latenz erkläre.</p>
<p>Frage ich mich nun gerade ob dies nicht auch schon funktioniert hätte wo ich noch alles ( 40k Daten ) auf einmal senden wollte..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336300</guid><dc:creator><![CDATA[minxno]]></dc:creator><pubDate>Wed, 01 Aug 2007 08:17:46 GMT</pubDate></item><item><title><![CDATA[Reply to Netzwerkprogrammierung on Wed, 01 Aug 2007 14:53:23 GMT]]></title><description><![CDATA[<p>Man sendet nicht alle Daten auf einmal.<br />
Was wenn es eine 3 GB große Datei ist!</p>
<p>Das aufteilen der Daten passt so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336629</guid><dc:creator><![CDATA[Unix-Tom]]></dc:creator><pubDate>Wed, 01 Aug 2007 14:53:23 GMT</pubDate></item></channel></rss>