<?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[Puffergröße Dateiserver]]></title><description><![CDATA[<p>Tag zusammen,</p>
<p>ich programmiere gerade einen TCP Datei-Server und -Klienten.<br />
Das Prinzip funktioniert ganz einfach:</p>
<p>Klient stellt Verbindung her<br />
Server sendet Eintrag (Dateiname + Größe)<br />
Klient vergleicht Dateigröße<br />
Klient fordert Datei an, falls Dateigrößen unterschiedlich</p>
<p>Das Senden der Datei funktioniert so:<br />
Klient fordert Paket an (bis jetzt 512 Byte)<br />
Server sendet Paket</p>
<p>klappt alles wunderbar, so lange die Dateien nicht groß sind. (&lt;100KB)</p>
<p>Nur leider habe ich auch vor größere Dateien (damit meine ich max. 3MB)<br />
zu versenden.<br />
Wenn ich weiterhin dieses Prinzip verwende, würde es ewig dauern eine Datei runterzuladen.<br />
Beispiel 80KB:<br />
80 * 1024 / 512 = 160 Anfragen<br />
1 Anfrage: 50ms<br />
=8000ms<br />
Somit würde ich schon für eine 80kB Datei 8 Sekunden nur fürs Anfordern des nächsten Paketes verbraten.<br />
Ich hab übrigens 512 Byte gewählt, weil ich auf <a href="http://www.win-tux.de/c_028_007.htm#...002D231F022193" rel="nofollow">http://www.win-tux.de/c_028_007.htm#...002D231F022193</a> gelesen hatte, dass 512 Byte (richtig, ich hab mich verlesen , es sollen KB sein) die richtige Puffergröße wäre.</p>
<p>Hab es dann auf 512KB vergrößert, was zur Folge hat, dass das Programm während dem Übertragen unregelmäßig die Verbindung abbricht.<br />
Das macht es immer, wenn ich eine Größe über 1024 Byte wähle.</p>
<p>Damit hab ich 2 Fragen:<br />
1. Was ist die optimale Puffergröße?<br />
2. Welches Prinzip sollte ich beim Senden der Datei verwenden?</p>
<p>Danke fürs lesen, hoffe ihr könnt mir bei dem Problem helfen</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/240962/puffergröße-dateiserver</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 16:10:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/240962.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 14 May 2009 05:48:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Puffergröße Dateiserver on Thu, 14 May 2009 05:48:11 GMT]]></title><description><![CDATA[<p>Tag zusammen,</p>
<p>ich programmiere gerade einen TCP Datei-Server und -Klienten.<br />
Das Prinzip funktioniert ganz einfach:</p>
<p>Klient stellt Verbindung her<br />
Server sendet Eintrag (Dateiname + Größe)<br />
Klient vergleicht Dateigröße<br />
Klient fordert Datei an, falls Dateigrößen unterschiedlich</p>
<p>Das Senden der Datei funktioniert so:<br />
Klient fordert Paket an (bis jetzt 512 Byte)<br />
Server sendet Paket</p>
<p>klappt alles wunderbar, so lange die Dateien nicht groß sind. (&lt;100KB)</p>
<p>Nur leider habe ich auch vor größere Dateien (damit meine ich max. 3MB)<br />
zu versenden.<br />
Wenn ich weiterhin dieses Prinzip verwende, würde es ewig dauern eine Datei runterzuladen.<br />
Beispiel 80KB:<br />
80 * 1024 / 512 = 160 Anfragen<br />
1 Anfrage: 50ms<br />
=8000ms<br />
Somit würde ich schon für eine 80kB Datei 8 Sekunden nur fürs Anfordern des nächsten Paketes verbraten.<br />
Ich hab übrigens 512 Byte gewählt, weil ich auf <a href="http://www.win-tux.de/c_028_007.htm#...002D231F022193" rel="nofollow">http://www.win-tux.de/c_028_007.htm#...002D231F022193</a> gelesen hatte, dass 512 Byte (richtig, ich hab mich verlesen , es sollen KB sein) die richtige Puffergröße wäre.</p>
<p>Hab es dann auf 512KB vergrößert, was zur Folge hat, dass das Programm während dem Übertragen unregelmäßig die Verbindung abbricht.<br />
Das macht es immer, wenn ich eine Größe über 1024 Byte wähle.</p>
<p>Damit hab ich 2 Fragen:<br />
1. Was ist die optimale Puffergröße?<br />
2. Welches Prinzip sollte ich beim Senden der Datei verwenden?</p>
<p>Danke fürs lesen, hoffe ihr könnt mir bei dem Problem helfen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710237</guid><dc:creator><![CDATA[Cypog]]></dc:creator><pubDate>Thu, 14 May 2009 05:48:11 GMT</pubDate></item><item><title><![CDATA[Reply to Puffergröße Dateiserver on Thu, 14 May 2009 08:23:51 GMT]]></title><description><![CDATA[<p>hi,</p>
<p>ohne code kann ich nicht viel sagen, aber wenn ich größer als 1024 höre denke ich gleich an die maximale Paketgröße (1500 Byte abzüglich TCP/UDP-Header)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710299</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710299</guid><dc:creator><![CDATA[mamue110]]></dc:creator><pubDate>Thu, 14 May 2009 08:23:51 GMT</pubDate></item><item><title><![CDATA[Reply to Puffergröße Dateiserver on Thu, 14 May 2009 09:12:40 GMT]]></title><description><![CDATA[<p>Hier mal die Funktion, die für das Laden der Datei zuständig ist:</p>
<pre><code>int LoadMap(const char * saveto, const char * mapname, long filesize)
{
	//char saveto[MAX_PATH_LEN] = &quot;&quot;;
	//memcpy(saveto, sapath, MAX_PATH_LEN);
	//strncat(saveto, mapname, MAX_PATH_LEN);
	FILE *datei = fopen(saveto, &quot;wb&quot;);

	if (datei == NULL)
		cout &lt;&lt; &quot;Kann Datei &quot; &lt;&lt; saveto &lt;&lt; &quot; nicht speichern.\n&quot;;
	else
	{
		char msg[128] = &quot;file &quot;;
		strncat(msg, (const char*)mapname + 1, sizeof(msg));
		if (send(sock, msg, strlen(msg) + 1, 0) == -1)
			cout &lt;&lt; &quot;Konnte Initialisierung von Dateitransfer nicht senden: &quot; &lt;&lt; WSAGetLastError() &lt;&lt; '\n';
		else
			cout &lt;&lt; &quot;Beginne Dateitransfer von Datei &quot; &lt;&lt; mapname &lt;&lt; &quot;.\n&quot;;
		int rstate = 0; char rdata[BUF_LEN] = &quot;&quot;;

		while (!sshutdown)
		{
			if ((rstate = recv(sock, (char*)&amp;rdata, sizeof(rdata), 0)) == -1)
			{
				cout &lt;&lt; &quot;Fehler beim Erhalten von Daten: &quot; &lt;&lt; WSAGetLastError() &lt;&lt; '\n';
				break;
			}
			if (rstate == 0)
			{
				cout &lt;&lt; &quot;Der Server hat die Verbindung während dem Laden beendet.\n&quot;;
				break;
			}
			fwrite(rdata, 1, rstate, datei);
			send(sock, &quot;#\0&quot;, 2, 0);
			filesize -= rstate;
			//cout &lt;&lt; filesize &lt;&lt; '\n';
			if (filesize == 0)
			{
				//cout &lt;&lt; rdata &lt;&lt; '\n';
				cout &lt;&lt; &quot;Datei erfolgreich geladen.\n&quot;;
				//cout &lt;&lt; rstate &lt;&lt; '\n';
				break;
			}
			else if (rstate != sizeof(rdata))
			{
				cout &lt;&lt; rstate &lt;&lt; ' ' &lt;&lt; sizeof(rdata) &lt;&lt; '\n';
				cout &lt;&lt; &quot;Fehler: unerwartetes Dateiende.\n&quot;;
				break;
			}
			//send(sock, &quot;#\0&quot;, 2, 0);
		}
		fclose(datei);
		//send(sock, &quot;#\0&quot;, 2, 0);
	}
	return 0;
}
</code></pre>
<p>Diese Funktion ist für die Kommunkiation zuständig:</p>
<pre><code>bool GetMapData()
{
	int rstate = 0; char rdata[BUF_LEN] = &quot;&quot;;

	//memcpy(rdata, &quot;req&quot;, 3);
	//rdata = &quot;req&quot;;
	//send(sock, rdata, 1, 3);
	if (send(sock, &quot;req&quot;, 3, 0) != -1)
		cout &lt;&lt; &quot;Fordere Versionsinfo an.\n&quot;;
	else
		cout &lt;&lt; &quot;Kann Versionsinfo nicht anfordern: &quot; &lt;&lt; WSAGetLastError() &lt;&lt; '\n';

	while (!sshutdown)
	{
		if ((rstate = recv(sock, (char*)&amp;rdata, sizeof(rdata), 0)) == -1)
		{
			cout &lt;&lt; &quot;Fehler beim Erhalten von Daten: &quot; &lt;&lt; WSAGetLastError() &lt;&lt; '\n';
			return false;
		}
		if (rstate == 0)
		{
			cout &lt;&lt; &quot;Der Server hat die Verbindung beendet.\n&quot;;
			return true;
		}
		rdata[rstate] = 0;
		if (server_cmd(rdata) == 0)
		{
			cout &lt;&lt; &quot;Antwort (&quot; &lt;&lt; rdata &lt;&lt; &quot;) unbekannt, beende Verbindung\n&quot;;
			//cout &lt;&lt; rstate &lt;&lt; '\n';
			closesocket(sock);
			return false;
		}
	}
	return true;
}
</code></pre>
<p>Hier werden die Server Nachrichten ausgewertet:</p>
<pre><code>int server_cmd(const char * cmd)
{
	if (strncmp(cmd, &quot;/msg &quot;, 5) == 0)
	{
		cout &lt;&lt; &quot;Nachricht:\n&quot;;
		cout &lt;&lt; (cmd + 5) &lt;&lt; '\n';
		return 1;
	}
	if (strncmp(cmd, &quot;map&quot;, 3) == 0)
	{
		char mappath[MAX_PATH_LEN] = &quot;&quot;;
		char complpath[MAX_PATH_LEN] = &quot;&quot;;
		memcpy(complpath, sapath, MAX_PATH_LEN);
		char fsize[20] = &quot;&quot;;
		getstrspc2(cmd, 1, &quot;  &quot;, mappath, sizeof(mappath));
		cout &lt;&lt; &quot;Dateiinformationen erhalten: &quot; &lt;&lt; mappath &lt;&lt; '\n';
		//cout &lt;&lt; cmd &lt;&lt; '\n';
		strncat(complpath, mappath, MAX_PATH_LEN);
		getstrspc2(cmd, 2, &quot; \0&quot;, fsize, sizeof(fsize));
		if (fsize[0] == 0)
			send(sock, &quot;/msg Fehler: Dateigr”ße invalid.\0&quot;, 33, 0);
		else
		{
			bool bsend = false;
			long lsize_new = atol(fsize);
			long lsize = 0;
			FILE * datei = fopen(complpath, &quot;rb&quot;);
			if (datei == NULL)
			{
				//cout &lt;&lt; &quot;Datei &quot; &lt;&lt; complpath &lt;&lt; &quot;existiert nicht.\n&quot;;
				char fpath[MAX_PATH_LEN] = &quot;&quot;;
				getpath(complpath, fpath, MAX_PATH_LEN);
				if (_access(fpath, 0) != 0)
				{
					cout &lt;&lt; &quot;Pfad existiert nicht.\n&quot;;
					return false;
				}
				else
					LoadMap(complpath, mappath, lsize_new);	
			}
			else
			{
				fseek(datei, 0, SEEK_END);
				lsize = ftell(datei);				
				fclose(datei);
				cout &lt;&lt; &quot;Vergleiche Dateigr”áen: &quot; &lt;&lt; lsize &lt;&lt; &quot; &quot; &lt;&lt; lsize_new &lt;&lt; '\n';
				if (lsize != lsize_new)
				{
					LoadMap(complpath, mappath, lsize_new);
				}
				else
				{
					cout &lt;&lt; &quot;Datei ist auf dem neustem Stand, fordere n„chsten Eintrag an.\n&quot;;
					if (send(sock, &quot;/next\0&quot;, 6, 0) == -1)
						cout &lt;&lt; &quot;Fehler: Konnte Antwort nicht senden.\n&quot;;
				}
			}
		}
		return 1;
	}
	return 0;
}
</code></pre>
<p>Die Server Funktion, die fürs Datei senden zuständig ist:</p>
<pre><code>void SendFile(const char * filename)
{
	int sendc = 0;
	char sdata[BUF_LEN] = &quot;&quot;;
	FILE * datei = fopen(filename, &quot;rb&quot;);
	if (datei == NULL)
	{
		char msg[50] = &quot;/msg Fehler: Konnte angeforderte Datei &quot;;
		strncat(msg, filename, sizeof(msg));
		strncat(msg, &quot; nicht finden.&quot;, sizeof(msg));
		cout &lt;&lt; (char *)msg + 5 &lt;&lt; '\n';
		send(sock2, msg, strlen(msg), 0);
	}
	else
	{
		while(!sshutdown &amp;&amp; (sendc = fread(sdata, 1, sizeof(sdata), datei)) != 0)
		{
			//cout &lt;&lt; sendc &lt;&lt; '\n';
			//sdata[sendc] = 0;
			if (send(sock2, (const char*)&amp;sdata, sendc, 0) == -1)
			{
				cout &lt;&lt; &quot;Fehler beim Senden der Nachricht: &quot; &lt;&lt; WSAGetLastError() &lt;&lt; '\n';
				break;
			}
			recv(sock2, sdata, 2, 0);
		}
		fclose(datei);
		//if (send(sock2, /*(const char*)-1*/&quot;\0&quot;, 1, 0) != -1)
			cout &lt;&lt; &quot;Dateiübertragung beendet.\n&quot;;
		//_getch();
		/*else
			cout &lt;&lt; &quot;Fehler: Konnte Dateiende nicht senden.\n&quot;;*/
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1710318</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710318</guid><dc:creator><![CDATA[Cypog]]></dc:creator><pubDate>Thu, 14 May 2009 09:12:40 GMT</pubDate></item><item><title><![CDATA[Reply to Puffergröße Dateiserver on Fri, 15 May 2009 22:19:35 GMT]]></title><description><![CDATA[<p>Ich geh mal davon aus, dass ein Puffer von 1024 KB unrealistisch ist und das wohl ein Druckfehler war.</p>
<p>Ich werde das Prinzip überarbeiten</p>
<p>Werds so versuchen:</p>
<p>Klient frägt nach Datenblock</p>
<p>Server schickt 2 Blöcke</p>
<p>Klient frägt nach dem nächsten Block, wenn der erste eingetroffen ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711284</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711284</guid><dc:creator><![CDATA[Cypog]]></dc:creator><pubDate>Fri, 15 May 2009 22:19:35 GMT</pubDate></item><item><title><![CDATA[Reply to Puffergröße Dateiserver on Fri, 15 May 2009 23:18:56 GMT]]></title><description><![CDATA[<p>Ich verstehe nicht ganz was du mit den Blöcken willst, und schon garnicht mit der fixen Blockgrösse.</p>
<p>Mach es entweder ganz ohne Blöcke, oder mit variabler Blockgrösse. Wobei der Client dann im Normalfall immer die ganze Datei auf einmal anfordert -- es sei denn z.B. die Verbindung wurde unterbrochen, der Client hat schon die ersten N Bytes, und will nurmehr den Rest anfordern.<br />
Das ist &quot;der übliche Weg&quot;. Alles andere halte ich für ziemlich unnötigen und sinnlosen Overhead.</p>
<p>Falls du meinst das wäre aus irgendeinem Grund schlecht, wäre ich interessiert diesen Grund zu erfahren <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/1711296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711296</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 15 May 2009 23:18:56 GMT</pubDate></item><item><title><![CDATA[Reply to Puffergröße Dateiserver on Sat, 16 May 2009 11:14:51 GMT]]></title><description><![CDATA[<p>Ich kenn nur nichts anderes als die Blockmethode.</p>
<p>Wie wird die vorgeschlagene Methode denn realisiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711376</guid><dc:creator><![CDATA[Cypog]]></dc:creator><pubDate>Sat, 16 May 2009 11:14:51 GMT</pubDate></item><item><title><![CDATA[Reply to Puffergröße Dateiserver on Sat, 16 May 2009 12:00:13 GMT]]></title><description><![CDATA[<p>Du vermischst irgendwie das Senden und Empfangen.</p>
<p>Entferne mal aus der SendFile()-Funktion den Aufruf &quot;recv(sock2, sdata, 2, 0);&quot;. Wofür hast du den denn gedacht?</p>
<p>Trenne dein Programm so auf, daß es genau 1 Empfangsschleife und 1 Sendefunktion gibt.</p>
<p>P.S: Deine interne Blockgröße ist eigentlich fast egal, da mittels TCP/IP sowieso blockweise übertragen wird (diese sollte - wenn überhaupt - auf die Festplattenzugriffe optimiert sein).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711386</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711386</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sat, 16 May 2009 12:00:13 GMT</pubDate></item><item><title><![CDATA[Reply to Puffergröße Dateiserver on Sat, 16 May 2009 12:07:51 GMT]]></title><description><![CDATA[<p>Diese recv hab ich gemacht, damit der Server wartet bis zum nächsten Senden, da es den gleichen Fehler (Pufferüberlauf?) gab wie oben beschrieben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711390</guid><dc:creator><![CDATA[Cypog]]></dc:creator><pubDate>Sat, 16 May 2009 12:07:51 GMT</pubDate></item><item><title><![CDATA[Reply to Puffergröße Dateiserver on Sun, 17 May 2009 15:34:41 GMT]]></title><description><![CDATA[<p>So, hab das recv in der SendFile bzw. das send in der LoadFile-Funktion jetzt entfernt und das klappt soweit wunderbar.</p>
<p>Das</p>
<pre><code>else if (rstate != sizeof(rdata))
{
    cout &lt;&lt; rstate &lt;&lt; ' ' &lt;&lt; sizeof(rdata) &lt;&lt; '\n';
    cout &lt;&lt; &quot;Fehler: unerwartetes Dateiende.\n&quot;;
    break;
}
</code></pre>
<p>hab ich natürlich auch entfernt, da nicht 512 Bytes empfangen werden, sondern was halt reinkommt.</p>
<p>Hab noch ein sleep nach der Schleife reingehaun damit sich die Daten der Datei mit der nächsten Nachricht nicht vermischen.</p>
<p>Hatte das Prinzip irgendwie nicht verstanden, aber jetzt tu ichs, danke für die Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711637</guid><dc:creator><![CDATA[Cypog]]></dc:creator><pubDate>Sun, 17 May 2009 15:34:41 GMT</pubDate></item><item><title><![CDATA[Reply to Puffergröße Dateiserver on Sun, 17 May 2009 00:02:32 GMT]]></title><description><![CDATA[<blockquote>
<p>Hab noch ein sleep reingehaun damit sich die Daten der Datei mit der nächsten Nachricht nicht vermischen.</p>
</blockquote>
<p>WTF?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711642</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 17 May 2009 00:02:32 GMT</pubDate></item><item><title><![CDATA[Reply to Puffergröße Dateiserver on Sun, 17 May 2009 04:40:35 GMT]]></title><description><![CDATA[<blockquote>
<p>Hab noch ein sleep reingehaun damit sich die Daten der Datei mit der nächsten Nachricht nicht vermischen.</p>
</blockquote>
<p>OMG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711655</guid><dc:creator><![CDATA[lolololo]]></dc:creator><pubDate>Sun, 17 May 2009 04:40:35 GMT</pubDate></item><item><title><![CDATA[Reply to Puffergröße Dateiserver on Sun, 17 May 2009 15:54:42 GMT]]></title><description><![CDATA[<p>SPAMT nicht rum, wenn ihr was konstruktives beizutragen habt, tut es, oder lasst es sein.</p>
<p>Ich geh mal davon aus, dass ihr den Beitrag missverstanden habt.</p>
<p>Das sleep ist hinter der Schleife, wo soll es auch sonst sein?<br />
Das Ding läuft übrigens auf Linux.</p>
<p>Anders würde die nächste Nachricht, sprich der nächste Dateieintrag noch in die Datei geschrieben werden. Man könnte es natürlich auch ohne sleep realisieren, indem man vor dem Schreiben einfach abfrägt, wieviel Daten überhaupt noch benötigt werden. Den Überschuss könnte man an die Funktion servercmd schicken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711818</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711818</guid><dc:creator><![CDATA[Cypog]]></dc:creator><pubDate>Sun, 17 May 2009 15:54:42 GMT</pubDate></item><item><title><![CDATA[Reply to Puffergröße Dateiserver on Sun, 17 May 2009 18:06:14 GMT]]></title><description><![CDATA[<p>Du solltest durch die Reaktionen aber mitbekommen haben, dass <code>Sleep()</code> keine Lösung ist - egal, ob win oder unix/linux oder was weiß ich nich noch - nat. solltest du das iwie abfragen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711890</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 17 May 2009 18:06:14 GMT</pubDate></item><item><title><![CDATA[Reply to Puffergröße Dateiserver on Sun, 17 May 2009 18:51:03 GMT]]></title><description><![CDATA[<p>Cypog schrieb:</p>
<blockquote>
<p>SPAMT nicht rum, wenn ihr was konstruktives beizutragen habt, tut es, oder lasst es sein.</p>
<p>Ich geh mal davon aus, dass ihr den Beitrag missverstanden habt.</p>
</blockquote>
<p>Geh aus wovon du willst.</p>
<blockquote>
<p>Das sleep ist hinter der Schleife, wo soll es auch sonst sein?<br />
Das Ding läuft übrigens auf Linux.</p>
<p>Anders würde die nächste Nachricht, sprich der nächste Dateieintrag noch in die Datei geschrieben werden. Man könnte es natürlich auch ohne sleep realisieren, indem man vor dem Schreiben einfach abfrägt, wieviel Daten überhaupt noch benötigt werden. Den Überschuss könnte man an die Funktion servercmd schicken.</p>
</blockquote>
<p>Ich hab das schon richtig verstanden, du bist nicht der erste der diesen Fehler macht. Und ich programmiere mit Sockets, im gegensatz zu dir, nicht erst seit ein paar Tagen.</p>
<p>sleep() als Lösung für solche Probleme ist grundsätzlich ein Fehler. Bei Sockets kann es z.B. passieren, dass entweder der Empfänger, oder die Netzwerk-Leitung, so langsam ist, dass beim Empfänger trotz des sleep() alles auf einmal ankommt. D.h. es würde erst nicht funktionieren. Zu testen ist sowas natürlich schwer, da man solche worst-case Situationen schwer absichtlich herbeiführen kann. Im Betrieb wird es sich aber früher oder später ergeben.</p>
<p>Die korrekte Lösung ist auf der Empfänger-Seite selbst mitzuzählen, und dann recv nur soviel als Puffergrösse zu übergeben, wie man maximal empfangen will. Dadurch muss man auch nichts an irgendwelche anderen Funktionen weitergeben, da die weiteren Daten noch im Socket-Puffer stehen bleiben.</p>
<p>Und ob das ganze unter Windows, Linux oder sonstwas läuft, ist vollkommen egal. Keine Ahnung wie du darauf kommst es könnte einen Unterschied machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711900</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 17 May 2009 18:51:03 GMT</pubDate></item><item><title><![CDATA[Reply to Puffergröße Dateiserver on Sun, 17 May 2009 19:15:53 GMT]]></title><description><![CDATA[<p>Dann schreibt nicht sowas sinnloses wie OMG oder WTF, was soll ich mir da denken?</p>
<p>sleep war eigtl. nur als Zwischenlösung gedacht. (soweit ich weiß reagiert das linux sleep anders als das windows Sleep, was in dem Fall aber keine Rolle spielt)</p>
<p>Das Problem mit der langsamen Leitung ist hier sehr unrealistisch, da eine gute Netzwerkleistung für das Nutzen des Dienstes Vorraussetzung ist.</p>
<blockquote>
<p>Und ob das ganze unter Windows, Linux oder sonstwas läuft, ist vollkommen egal. Keine Ahnung wie du darauf kommst es könnte einen Unterschied machen.</p>
</blockquote>
<p>In dem Fall ist es egal, aber ich kann ja nicht duch ein &quot;WTF&quot; mir denken, welches Problem du meinst.</p>
<blockquote>
<p>Die korrekte Lösung ist auf der Empfänger-Seite selbst mitzuzählen, und dann recv nur soviel als Puffergrösse zu übergeben</p>
</blockquote>
<p>Alles klar, werd das so machen, danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711905</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711905</guid><dc:creator><![CDATA[Cypog]]></dc:creator><pubDate>Sun, 17 May 2009 19:15:53 GMT</pubDate></item><item><title><![CDATA[Reply to Puffergröße Dateiserver on Sun, 17 May 2009 19:30:54 GMT]]></title><description><![CDATA[<p>Cypog schrieb:</p>
<blockquote>
<p>Das Problem mit der langsamen Leitung ist hier sehr unrealistisch, da eine gute Netzwerkleistung für das Nutzen des Dienstes Vorraussetzung ist</p>
</blockquote>
<p>OMG ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711912</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 17 May 2009 19:30:54 GMT</pubDate></item><item><title><![CDATA[Reply to Puffergröße Dateiserver on Sun, 17 May 2009 19:31:00 GMT]]></title><description><![CDATA[<p>Cypog schrieb:</p>
<blockquote>
<p>Dann schreibt nicht sowas sinnloses wie OMG oder WTF, was soll ich mir da denken?</p>
</blockquote>
<p>Gut dann schreib ich das nächste mal garnix. Mir kanns ja egal sein was du zusammenprogrammierst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711913</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 17 May 2009 19:31:00 GMT</pubDate></item><item><title><![CDATA[Reply to Puffergröße Dateiserver on Sun, 17 May 2009 19:39:46 GMT]]></title><description><![CDATA[<p>Cypog schrieb:</p>
<blockquote>
<p>Das Problem mit der langsamen Leitung ist hier sehr unrealistisch, da eine gute Netzwerkleistung für das Nutzen des Dienstes Vorraussetzung ist.</p>
</blockquote>
<p>Heute, zum Beispiel, ist anscheinend in Paris ein zentraler Server ausgestiegen, wodurch gewisse Teile des Netzes nur verlangsamt erreichbar wurde. Das Problem war zwar innert Minuten behoben, doch das Netz war langsamer, gewisse Webseiten konnte ich sogar gar nicht mehr erreichen.</p>
<p>Wenn du also sowas voraussetzt, dann schliesst du jeden Internetnutzer aus <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 />
Und wenn du nun sagst, dass dein Programm nur in einem privaten oder geschäftlichen Netzwerk läuft, dann kann ich dir sagen, dass es dort genausogut zu Verzögerungen oder Staus kommen kann. Mag mich da an ein paar Berichte von meinem Vater aus der Novartis erinnern.</p>
<p>Verlasse dich nie auf das Netzwerk.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711918</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711918</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 17 May 2009 19:39:46 GMT</pubDate></item><item><title><![CDATA[Reply to Puffergröße Dateiserver on Sun, 17 May 2009 22:13:18 GMT]]></title><description><![CDATA[<p>DER THREADERSTELLER IST EIN FOLLIDEOT</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711953</guid><dc:creator><![CDATA[WTFOMGLOL]]></dc:creator><pubDate>Sun, 17 May 2009 22:13:18 GMT</pubDate></item><item><title><![CDATA[Reply to Puffergröße Dateiserver on Sun, 17 May 2009 22:38:38 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9752">@Dravere</a>:</p>
<p>Ich weiß schon, was du meinst.</p>
<p>Stimmt schon.</p>
<p>Kommt es zu diesem Problem, passiert auch nix, dann lädt derjenige sich das nochmal. Es geht auch nix kaputt dadurch <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 />
Sollte die Verbindung wirklich so schlecht sein, kann man die Dateien sowieso nicht nutzen, da es Dateien sind, die man fürs Spielen für ein Multiplayer Spiel braucht (Der Gameserver befindet sich auf dem selben Server)</p>
<p>Da es sowieso nur eine schnelle Lösung war und ich das Programm wie beschrieben umbaue, spielt das eh keine Rolle mehr.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16305">@unskilled</a>:<br />
Leute! Wenn ich schreibe, dass das Vorraussetzung ist, dann stimmt das auch und eure kindischen Kommentare könnt ihr euch sonst wohin stecken.<br />
Wie hoch ist das durschnittliche Alter hier?</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13960">@hustbaer</a>:<br />
Du widersprichst dir selber:<br />
Zuerst schreibst du &quot;WTF&quot;, womit ich überhaupt nichts anfangen kann.<br />
Dann schreibst du mir wirklich hilfreiche Tipps, wofür ich dir dankbar bin.<br />
Und jetzt beschwerst du dich, dass ich mit deinem Kommentar nix anfangen kann?<br />
Also entweder willst du mir helfen oder nicht Oo</p>
<p>Hier sollte mal ein Moderator die ganzen sinnlosen Kommentare löschen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711957</guid><dc:creator><![CDATA[Cypog]]></dc:creator><pubDate>Sun, 17 May 2009 22:38:38 GMT</pubDate></item><item><title><![CDATA[Reply to Puffergröße Dateiserver on Sun, 17 May 2009 22:44:01 GMT]]></title><description><![CDATA[<p>selten sowas dummes gelest</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711958</guid><dc:creator><![CDATA[^^]]></dc:creator><pubDate>Sun, 17 May 2009 22:44:01 GMT</pubDate></item><item><title><![CDATA[Reply to Puffergröße Dateiserver on Sun, 17 May 2009 22:54:35 GMT]]></title><description><![CDATA[<p>Cypog schrieb:</p>
<blockquote>
<p>Kommt es zu diesem Problem, passiert auch nix, dann lädt derjenige sich das nochmal. Es geht auch nix kaputt dadurch <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>Ja, wenn das ein Programmierer so festlegt und ich dessen Programm verwende, dann bekomme ich manchmal eine Mordlust. Der User wird dir dafür jedenfalls sicher nicht danken und der Wertung deines Programmes würde es auch nicht gut tun. Und Imagepflege, bzw. Marketing, ist sehr wichtig bei der Vermarktung <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>Cypog schrieb:</p>
<blockquote>
<p>Da es sowieso nur eine schnelle Lösung war und ich das Programm wie beschrieben umbaue, spielt das eh keine Rolle mehr.</p>
</blockquote>
<p>Naja, doch. Wir haben hier oft Leute, welche den Tipps brav folgen, Code umschreiben, verbessern usw. usf., im Endeffekt aber gar nicht verstanden haben, wieso das alles besser ist. Wir wollen hier schliesslich einen Lerneffekt erzielen <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>Und das mit den etwas seltsamen Kommentaren, nimm es einfach ein bisschen lockerer. Die meisten sind nicht böse gemeint und wenn sie es sind, dann ist meistens der Autor etwas unterblichtet und behinderten Leuten sollte man ja mit Rücksicht begegnen.<br />
Aber hier liest man manchmal so viel seltsames Zeug, gerade auch so ein aktives Mitglied wie hustbaer oder unskilled, dass einem zum Teil wirklich nur noch ein WTF in den Sinn kommt. Da braucht man dann Zeit, um seine Gedanken wieder zu sammeln <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="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711959</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 17 May 2009 22:54:35 GMT</pubDate></item><item><title><![CDATA[Reply to Puffergröße Dateiserver on Sun, 17 May 2009 23:11:37 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/21690">@Cypog</a>:<br />
Bleib mal etwas lockerer, immerhin sagst du selbst dass du hier hilfreiche Antworten bekommen hast.<br />
Was den Rest angeht: fass dir mal an die eigene Nase, dein Ton ist auch nicht sonderlich freundlich.</p>
<p>Du unterstellst auch wiederholt dass andere die dir antworten nix verstehen und kindisch sind und wahrscheinlich noch in die Windeln pissen. Damit macht man sich keine Freunde.</p>
<p>Was das &quot;WTF?&quot; sollte? Ganz einfach: für mich hat das so geklungen, als ob du das für eine gute Lösung halten würdest. Und das kann ich nur mit einem &quot;WTF?&quot; quittieren, da es eine denkbar dumme und kurzsichtige Lösung ist.</p>
<blockquote>
<p>Wenn ich schreibe, dass das Vorraussetzung ist, dann stimmt das auch und eure kindischen Kommentare könnt ihr euch sonst wohin stecken.</p>
</blockquote>
<p>Genau sowas meine ich. Nicht freundlich, und noch dazu grober Unfug.</p>
<p>Um es in deinen Worten zu sagen: wenn <em>ich</em> dir sage, dass das falsch ist, und daneben gehen kann, dann kannst du das ruhig glauben. Ein Programm welches auf ein bestimmtes Timing angewiesen ist, um korrekt zu funktionieren, ist kein Programm, sondern ein Scheisshaufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711961</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 17 May 2009 23:11:37 GMT</pubDate></item><item><title><![CDATA[Reply to Puffergröße Dateiserver on Sun, 17 May 2009 23:31:38 GMT]]></title><description><![CDATA[<p>hustbaer, du brauchst mir wirklich nicht erzählen, dass ich unfreundlich reagiere, wenn ich sowas lesen muss:</p>
<p>OMG<br />
WTF<br />
DER THREADERSTELLER IST EIN FOLLIDEOT<br />
selten sowas dummes gelest</p>
<p>Soll ich mich etwa für solche Kommentare bedanken?</p>
<p>Für mich ist das Thema seit einer Seite abgeschlossen, aber irgendwer, und damit mein ich nicht Dravere, muss wohl immer seinen Senf dazu geben.</p>
<p>Oja, ich hab lediglich geschrieben, dass mein Beitrag missverstanden wurde und nicht behauptet, dass das deine Schuld war, vielmehr war es meine, weil ich mich nicht deutlich ausgedrückt hab, also brauchst du dich doch gar nicht beschweren oder angegriffen fühlen ;), tut mir leid wenns so rüberkam</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711964</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711964</guid><dc:creator><![CDATA[Cypog]]></dc:creator><pubDate>Sun, 17 May 2009 23:31:38 GMT</pubDate></item><item><title><![CDATA[Reply to Puffergröße Dateiserver on Sun, 17 May 2009 23:39:17 GMT]]></title><description><![CDATA[<p>Cypog schrieb:</p>
<blockquote>
<p>Für mich ist das Thema seit einer Seite abgeschlossen</p>
</blockquote>
<p>dann mach ich doch mal zu. <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 />
jetzt kriege ich zwar haue, aber die kriege ich eh regelmäßig, ob ich was anstelle oder nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1711965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1711965</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 17 May 2009 23:39:17 GMT</pubDate></item></channel></rss>