<?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[[C++] Filetransfer via tcp protocol]]></title><description><![CDATA[<p>Hallo!</p>
<p>Also hier mein Problem: Ich wollte mal so was machen wie ftp, also einfach einen server, einen client, und der client kann sich dateien vom server runterladen. Ist mir auch gelungen, übertragung alles hat gut geklappt, ABER die transferraten waren mehr als schlecht -&gt; 2KB/s sobald ich den speed also die größe des auf einmal zu schickenden packetes erhöht habe, hat der client die dateien nur mehr fehlerhaft erhalten...</p>
<p>Ich möchte jetzt sowas machen, dass die transferrate anpasst, also im netzwerk dann 10-20MB/s, im internet eben das was geht.</p>
<p>Hat jemand ein projekt bzw. ein tutorial zum effizienten dateitransfer bzw. einfach einer effizienten verbindung?</p>
<p>Hoffe ihr versteht mein Anliegen, sonst bitte nachfragen.</p>
<p>Vielen dank schonmal.</p>
<p>mfg<br />
mitos</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/189211/c-filetransfer-via-tcp-protocol</link><generator>RSS for Node</generator><lastBuildDate>Thu, 02 Jul 2026 17:51:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/189211.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 09 Aug 2007 17:33:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [C++] Filetransfer via tcp protocol on Thu, 09 Aug 2007 17:33:05 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Also hier mein Problem: Ich wollte mal so was machen wie ftp, also einfach einen server, einen client, und der client kann sich dateien vom server runterladen. Ist mir auch gelungen, übertragung alles hat gut geklappt, ABER die transferraten waren mehr als schlecht -&gt; 2KB/s sobald ich den speed also die größe des auf einmal zu schickenden packetes erhöht habe, hat der client die dateien nur mehr fehlerhaft erhalten...</p>
<p>Ich möchte jetzt sowas machen, dass die transferrate anpasst, also im netzwerk dann 10-20MB/s, im internet eben das was geht.</p>
<p>Hat jemand ein projekt bzw. ein tutorial zum effizienten dateitransfer bzw. einfach einer effizienten verbindung?</p>
<p>Hoffe ihr versteht mein Anliegen, sonst bitte nachfragen.</p>
<p>Vielen dank schonmal.</p>
<p>mfg<br />
mitos</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1341768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1341768</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 09 Aug 2007 17:33:05 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Filetransfer via tcp protocol on Thu, 09 Aug 2007 17:52:01 GMT]]></title><description><![CDATA[<blockquote>
<p>hat der client die dateien nur mehr fehlerhaft erhalten...</p>
</blockquote>
<p>dann hast du einen programmierfehler gemacht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1341780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1341780</guid><dc:creator><![CDATA[??????]]></dc:creator><pubDate>Thu, 09 Aug 2007 17:52:01 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Filetransfer via tcp protocol on Thu, 09 Aug 2007 18:08:40 GMT]]></title><description><![CDATA[<p>ne, denn wenn ich den buffer verkleinert hab hats funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1341791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1341791</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 09 Aug 2007 18:08:40 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Filetransfer via tcp protocol on Thu, 09 Aug 2007 18:11:54 GMT]]></title><description><![CDATA[<p>mitos schrieb:</p>
<blockquote>
<p>ne, denn wenn ich den buffer verkleinert hab hats funktioniert.</p>
</blockquote>
<p>doch. TCP sorgt selbständig dafür, dass nichts verloren geht. dein programm muss natürlich auch alles senden und abholen. das ist definitiv ein programmierfehler.<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/1341792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1341792</guid><dc:creator><![CDATA[Undertaker]]></dc:creator><pubDate>Thu, 09 Aug 2007 18:11:54 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Filetransfer via tcp protocol on Thu, 09 Aug 2007 18:11:57 GMT]]></title><description><![CDATA[<p>Der Programmierfehler macht sich bei kleinerem Puffer vielleicht nicht bemerkbar, es bleibt aber trotzdem einer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1341793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1341793</guid><dc:creator><![CDATA[??????]]></dc:creator><pubDate>Thu, 09 Aug 2007 18:11:57 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Filetransfer via tcp protocol on Thu, 09 Aug 2007 18:33:49 GMT]]></title><description><![CDATA[<p>hmm ok, also ich habs so gemacht, dass die datei mit fopen binär eingelesen wird. dann wird ein buffer vollgepackt und verschickt. dann schickt der client zurück, da er hats erhalten, dann ist wieder der server dran...</p>
<p>Also auch wenn ich nen buffer mit char buffer[8096]; also 8KB verschick, sorgt tcp dafür dass alles ganz ankommt?</p>
<p>wenn es funktioniert wenn der buffer[512]; ist, was könnte die ursache sein? bzw. wo könnte ich schauen? ich glaube es würde im moment nicht viel helfen, wenn ich den quellcode poste da er wirklich nicht schön ist. <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="🙂"
    /> eventuell werd ich nochmal neu beginnen und einfach ein projekt wo nur geschickt wird erstellen, dann kann man da den fehler einfacher suchen, ansonsten wäre ich noch für tutorials, bzw. richtig funktioniernde dateiversendungsprogramme dankbar <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>danke,<br />
mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1341804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1341804</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 09 Aug 2007 18:33:49 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Filetransfer via tcp protocol on Thu, 09 Aug 2007 19:15:12 GMT]]></title><description><![CDATA[<p>Lad das Projekt einfach mal hoch. Schlechten Code sehen wir hier jeden Tag,<br />
da kommt es auf deinen auch nicht mehr an...und dir wird geholfen <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/1341823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1341823</guid><dc:creator><![CDATA[Rat]]></dc:creator><pubDate>Thu, 09 Aug 2007 19:15:12 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Filetransfer via tcp protocol on Thu, 09 Aug 2007 19:22:43 GMT]]></title><description><![CDATA[<p>mitos schrieb:</p>
<blockquote>
<p>Also auch wenn ich nen buffer mit char buffer[8096]; also 8KB verschick, sorgt tcp dafür dass alles ganz ankommt?</p>
</blockquote>
<p>klar, aber du kannst ihm natürlich nicht mit z.b. konstant 10000Hz 8kB 'auf die mütze hauen' <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 />
beachte den rückgabewert der 'send' funktion. ist der kleiner, als das, was du senden möchtest, dann musst du den rest etwas später hinterherschicken.<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/1341829</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1341829</guid><dc:creator><![CDATA[Undertaker]]></dc:creator><pubDate>Thu, 09 Aug 2007 19:22:43 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Filetransfer via tcp protocol on Thu, 09 Aug 2007 19:23:45 GMT]]></title><description><![CDATA[<p>hmm ne das will ich euch echt nicht antun <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
ich machs neu, nur mit dem nötigsten, dann ist es für alle einfacher, melde mich dann sofort, sobald ichs hab.</p>
<p>PS: weiß grad jemand irgendwas wie ich das hochladen kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1341830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1341830</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 09 Aug 2007 19:23:45 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Filetransfer via tcp protocol on Thu, 09 Aug 2007 19:45:32 GMT]]></title><description><![CDATA[<p>Microsoft bietet da auch noch was nettes an:<br />
<a href="http://msdn2.microsoft.com/en-us/library/ms740565.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/ms740565.aspx</a><br />
<a href="http://msdn2.microsoft.com/en-us/library/ms740566.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/ms740566.aspx</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1341845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1341845</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Thu, 09 Aug 2007 19:45:32 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Filetransfer via tcp protocol on Thu, 09 Aug 2007 20:43:09 GMT]]></title><description><![CDATA[<p>Dein Problem ist dass du Doku zu send() und recv() nicht gelesen oder nicht verstanden hast. Zumindest wette ich dass das das Problem ist.<br />
send(..., 10, 0) verschickt nicht 10 Byte, sondern soviel wie der TCP/IP Stack gerade lustig ist, also 1 bis 10 Byte (blocking) oder 0 bis 10 Byte (non-blocking).<br />
Genauso empfängt recv(..., 10, 0) nicht 10 Byte sondern 1-10 bzw. 0-10.</p>
<p>Ich nehme an du arbeitest mit blocking Sockets, daher hats mit send(..., 1, 0) und recv (..., 1, 0) auch funktioniert, und jetzt, mit grösseren Puffern, gehts nichtmehr.</p>
<p>BTW: wenn du volle Geschwindigkeit haben willst solltest du mehr als 8K Puffer verwenden. Wenn das Programm sehr viele Verbindungen gleichzeitig (min. &gt;100) ist Speicher sparen eine sehr gute Idee. Sonst würde ich sagen zwischen 64K und 512K als Puffer sind schon gut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1341873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1341873</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 09 Aug 2007 20:43:09 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Filetransfer via tcp protocol on Thu, 09 Aug 2007 20:51:35 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>BTW: wenn du volle Geschwindigkeit haben willst solltest du mehr als 8K Puffer verwenden. Wenn das Programm sehr viele Verbindungen gleichzeitig (min. &gt;100) ist Speicher sparen eine sehr gute Idee. Sonst würde ich sagen zwischen 64K und 512K als Puffer sind schon gut.</p>
</blockquote>
<p>naja, ich glaube der tcp stack selber nimmt sich pro socket maximal 32K für den sendebuffer (oder war das bei solaris so?). wichtig ist halt, dass der immer schön voll ist, viel mehr kann man nicht machen.<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/1341877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1341877</guid><dc:creator><![CDATA[Undertaker]]></dc:creator><pubDate>Thu, 09 Aug 2007 20:51:35 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Filetransfer via tcp protocol on Thu, 09 Aug 2007 21:13:12 GMT]]></title><description><![CDATA[<p>Winsock selbst hat unabhängig vom TCP/IP-Stack auch nochmal Puffer (siehe z.B. setsockopt() und SO_RCVBUF...).</p>
<p>Und man sollte wirklich die Rückgabewerte von send und recv prüfen <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=";D"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1341890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1341890</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Thu, 09 Aug 2007 21:13:12 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Filetransfer via tcp protocol on Thu, 09 Aug 2007 21:25:22 GMT]]></title><description><![CDATA[<p>geeky schrieb:</p>
<blockquote>
<p>Winsock selbst hat unabhängig vom TCP/IP-Stack auch nochmal Puffer (siehe z.B. setsockopt() und SO_RCVBUF...).</p>
</blockquote>
<p>das ist doch bestimmt der gleiche buffer, ansonsten wär's ja doppelt gemoppelt und mit unnötigen buffer-umschaufeleien verbunden...<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/1341904</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1341904</guid><dc:creator><![CDATA[Undertaker]]></dc:creator><pubDate>Thu, 09 Aug 2007 21:25:22 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Filetransfer via tcp protocol on Thu, 09 Aug 2007 21:48:42 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>send(..., 10, 0) verschickt nicht 10 Byte, sondern soviel wie der TCP/IP Stack gerade lustig ist, also 1 bis 10 Byte (blocking) oder 0 bis 10 Byte (non-blocking).</p>
</blockquote>
<p>Im Blocking-Modus wartet send immer bis alles weitergereicht wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1341923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1341923</guid><dc:creator><![CDATA[--------]]></dc:creator><pubDate>Thu, 09 Aug 2007 21:48:42 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Filetransfer via tcp protocol on Fri, 10 Aug 2007 09:03:06 GMT]]></title><description><![CDATA[<p>so neue client/server sind fertig und über netzwerk funktionierts mal super <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="🙂"
    /> also schnell und ohne fehler. leider kann ichs noch nicht über internet testen. ich melde mich sobald ichs testen konnte.</p>
<p>vielen dank,<br />
mfg<br />
mitos</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342037</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342037</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 10 Aug 2007 09:03:06 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Filetransfer via tcp protocol on Fri, 10 Aug 2007 09:41:07 GMT]]></title><description><![CDATA[<p>ok also es funktioniert ab einem buffer von 4096 byte nicht mehr einwandfrei:</p>
<p>da kommen dann zukurze strings an, send gibt error zurück.<br />
ich versuche jetzt mal sie send errors zu verhindern. Was ist sonst noch falsch?<br />
<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>code client:<br />
main.cpp</p>
<pre><code>#include &quot;header.h&quot;

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);

FILE* fcrefile=NULL;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{

   HWND         hWnd;
   MSG          msg;
   WNDCLASSEX   wndclassex = {0};

   wndclassex.cbSize        = sizeof(WNDCLASSEX);
   wndclassex.style         = CS_HREDRAW | CS_VREDRAW;
   wndclassex.lpfnWndProc   = WndProc;
   wndclassex.cbClsExtra    = 0;
   wndclassex.cbWndExtra    = 0;
   wndclassex.hInstance     = hInstance;
   wndclassex.hIcon         = LoadIcon(GetModuleHandle(NULL),MAKEINTRESOURCE(0));
   wndclassex.hCursor       = LoadCursor (NULL, IDC_ARROW);
   wndclassex.hbrBackground = (HBRUSH)(COLOR_WINDOW);
   wndclassex.lpszMenuName  = NULL;
   wndclassex.lpszClassName = szAppName;
   wndclassex.hIconSm       = wndclassex.hIcon;

   if (!RegisterClassEx (&amp;wndclassex))
   {
      MessageBox (NULL,&quot;fehler beim registrieren!&quot;,
                  szAppName, MB_ICONERROR);
      return 0;
   }

   int resX=GetSystemMetrics(SM_CXSCREEN);
   int resY=GetSystemMetrics(SM_CYSCREEN);

   hWnd = CreateWindowEx (/*WS_EX_OVERLAPPEDWINDOW*/0, 
                  szAppName, 
                  szAppName, 
                  WS_SYSMENU|WS_MINIMIZEBOX, 
                  (resX)/2-(x/2),                    
                  (resY)/2-(y/2),       
                  x,               
                  y,                 
                  NULL, 
                  NULL,          
                  hInstance,             
                  NULL); 

   ShowWindow (hWnd, iCmdShow);
   UpdateWindow (hWnd);

   while (GetMessage (&amp;msg, NULL, 0, 0))
   {
      TranslateMessage (&amp;msg);
      DispatchMessage (&amp;msg);
   }
   return msg.wParam;
}

LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{

   switch (message)
   {
   case WM_CREATE:
	   {
		  ConnectToServer(hWnd);
		  fcrefile=fopen(&quot;testtemp.exe&quot;,&quot;wb&quot;);

		  break;
	   }

   case WM_COMMAND:
	   {
		  /* if(lParam==(LPARAM)hEditFilter)
		   {

		   }*/
		   break;
	   }
	case TCP_SOCKET_MSG:
		{
			if (WSAGETSELECTERROR(lParam)) 
				return -1;
			TMP_Socket = (SOCKET)wParam;

			switch (WSAGETSELECTEVENT(lParam))
			{
				case FD_READ:
				{
					ZeroMemory(recv_buffer,MAX_BUFLEN);
					laenge = recv(TMP_Socket, recv_buffer,4,0);

					if(laenge&lt;0)
						break;

					recv_buffer[laenge]='\0';

					laenge=atoi(recv_buffer);

					buflaenge = recv(TMP_Socket, recv_buffer,laenge,0);

					recv_buffer[buflaenge]='\0';

					if(buflaenge!= laenge)
						MessageBox(hWnd,&quot;buflaenge!=laenge&quot;,recv_buffer,0);

					if(!strcmp(recv_buffer,&quot;][ende][&quot;))
					{
						fclose(fcrefile);
						SetWindowText(hWnd,&quot;finito&quot;);
					}
					else
					{
						for(int i=0; i&lt;laenge; i++)
							fputc(recv_buffer[i],fcrefile);

						sendV(TMP_Socket,&quot;get&quot;);
					}

					break;
				}

				case FD_CLOSE:
				{
					closesocket(TMP_Socket);
					break;
				}
			}
			break;
		}
   case WM_TIMER:
	   {

		   break;
	   }
   case WM_DESTROY:
	   {
			PostQuitMessage (0);
			return (0);
	   }
   }

   return DefWindowProc (hWnd, message, wParam, lParam);
}
</code></pre>
<p>header.h</p>
<pre><code>#include &lt;windows.h&gt;
#include &lt;windef.h&gt;
#include &lt;stdio.h&gt;
#undef _WINDOWS_
#include &lt;afxsock.h&gt;

#define TCP_SOCKET_MSG WM_APP+21
#define TCP_Port 36953
#define MAX_BUFLEN 9000 ///////////////// DIE ALLES ENTSCHEIDENDE BUFFERGROESSE

static char szAppName[] = &quot;fileclient&quot;;
static int x=500;
static int y=500;

int laenge;
int buflaenge;
char buffer[MAX_BUFLEN];
char recv_buffer[MAX_BUFLEN];

static SOCKET TCP_Socket=INVALID_SOCKET;
static SOCKET TMP_Socket=INVALID_SOCKET;
static SOCKADDR_IN TCPServer={0};
static SOCKADDR_IN TCPClient={0};

int startWinsock(void)
{
	WSADATA wsa;		
	return WSAStartup(MAKEWORD(2,0),&amp;wsa);
}

bool ConnectToServer(HWND hWndS)
{

	bool Connected=false;
	startWinsock();
	if(TCP_Socket!= INVALID_SOCKET)
		closesocket(TCP_Socket);

	TCP_Socket = socket(AF_INET,SOCK_STREAM,0);

	TCPServer.sin_family = AF_INET; 
	TCPServer.sin_addr.s_addr= inet_addr(&quot;127.0.0.1&quot;);

	TCPServer.sin_port = htons(TCP_Port);

	int err=connect(TCP_Socket,(SOCKADDR FAR *)&amp;TCPServer,sizeof(SOCKADDR_IN));

	WSAAsyncSelect(TCP_Socket, hWndS, TCP_SOCKET_MSG, FD_READ | FD_CLOSE);

	if (SOCKET_ERROR == err) 
	{ 
		MessageBox(hWndS,&quot;Es konnte keine Verbindung zum Server hergestellt werden\nVersuchen Sie sich später erneut zu verbinden&quot;, &quot;Error&quot;, MB_ICONERROR|MB_OK);
		Connected=false;
	} 
	else
	{
		Connected=true;
	}

	return Connected;
}

int sendV(SOCKET TCP_SOC,char* BufferToSend)
{
	char buffer[MAX_BUFLEN];
	int x=0;

	int buflaenge=0;
	buflaenge=strlen(BufferToSend);
	if(buflaenge&gt;MAX_BUFLEN)
		return -1;

	sprintf(buffer,&quot;%04i%s&quot;,buflaenge,BufferToSend);

	return send(TCP_SOC,buffer,buflaenge+4,0);

}

void CommandWorker(char* buffer)
{
	//MessageBox(0,buffer,0,0);

}
</code></pre>
<p>code server:<br />
main.cpp</p>
<pre><code>#include &quot;header.h&quot;

FILE *sendfile=NULL;

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{

   HWND         hWnd;
   MSG          msg;
   WNDCLASSEX   wndclassex = {0};

   wndclassex.cbSize        = sizeof(WNDCLASSEX);
   wndclassex.style         = CS_HREDRAW | CS_VREDRAW;
   wndclassex.lpfnWndProc   = WndProc;
   wndclassex.cbClsExtra    = 0;
   wndclassex.cbWndExtra    = 0;
   wndclassex.hInstance     = hInstance;
   wndclassex.hIcon         = LoadIcon(GetModuleHandle(NULL),MAKEINTRESOURCE(0));
   wndclassex.hCursor       = LoadCursor (NULL, IDC_ARROW);
   wndclassex.hbrBackground = (HBRUSH)(COLOR_WINDOW);
   wndclassex.lpszMenuName  = NULL;
   wndclassex.lpszClassName = szAppName;
   wndclassex.hIconSm       = wndclassex.hIcon;

   if (!RegisterClassEx (&amp;wndclassex))
   {
      MessageBox (NULL,&quot;fehler beim registrieren!&quot;,
                  szAppName, MB_ICONERROR);
      return 0;
   }

   int resX=GetSystemMetrics(SM_CXSCREEN);
   int resY=GetSystemMetrics(SM_CYSCREEN);

   hWnd = CreateWindowEx (/*WS_EX_OVERLAPPEDWINDOW*/0, 
                  szAppName, 
                  szAppName, 
                  WS_SYSMENU|WS_MINIMIZEBOX, 
                  (resX)/2-(x/2),                    
                  (resY)/2-(y/2),       
                  x,               
                  y,                 
                  NULL, 
                  NULL,          
                  hInstance,             
                  NULL); 

   ShowWindow (hWnd, iCmdShow);
   UpdateWindow (hWnd);

   while (GetMessage (&amp;msg, NULL, 0, 0))
   {
      TranslateMessage (&amp;msg);
      DispatchMessage (&amp;msg);
   }
   return msg.wParam;
}

LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{

static HWND hStaTime;

   switch (message)
   {
   case WM_CREATE:
	   {
		   hStaTime= CreateWindow(&quot;static&quot;,
										&quot;send time&quot;,
										WS_VISIBLE|WS_CHILD,
										30,30,80,40,
										hWnd,
										0,
										((LPCREATESTRUCT) lParam)-&gt;hInstance,
										0
										); 
		  StartServer(hWnd);
		  sendfile=fopen(&quot;temp.exe&quot;,&quot;rb&quot;);

		  break;
	   }

   case WM_COMMAND:
	   {
		  /* if(lParam==(LPARAM)hEditFilter)
		   {

		   }*/
		   break;
	   }
	case TCP_SOCKET_MSG:
		{
			if (WSAGETSELECTERROR(lParam)) 
				return -1;
			TMP_Socket = (SOCKET)wParam;

			switch (WSAGETSELECTEVENT(lParam))
			{
				case FD_READ:
				{
					ZeroMemory(recv_buffer,MAX_BUFLEN);

					laenge = recv(TMP_Socket, recv_buffer,4,0); //holt sich die länge des kommenden strings

					if(laenge&lt;0)
						break;

					recv_buffer[laenge]='\0';

					laenge=atoi(recv_buffer);

					buflaenge = recv(TMP_Socket, recv_buffer,laenge,0);

					recv_buffer[buflaenge]='\0';

					if(buflaenge!= laenge)
						MessageBox(hWnd,&quot;buflaenge!=laenge&quot;,&quot;error&quot;,0);

					if(!strcmp(recv_buffer,&quot;get&quot;))
					{
						for(int i=0; i&lt;(MAX_BUFLEN-5); ++i)
						{
							if(!feof(sendfile))
							readbuf[i]=fgetc(sendfile);
							else
							{i--;
							break;
							}
						}

						if(!ferror(sendfile)&amp;&amp;i&gt;0)
						{
							char sbuffer[MAX_BUFLEN];
							sprintf(sbuffer,&quot;%04i&quot;,i);

							for(int j=4; j&lt;(i+4); j++)
								sbuffer[j]=readbuf[j-4];
							if(send(TMP_Socket,sbuffer,i+4,0)!=i+4)
								MessageBox(0,&quot;send error&quot;,0,0);
						}

						if(feof(sendfile))
						{
							send(TMP_Socket,&quot;0008][ende][&quot;,12,0);
							KillTimer(hWnd,0);
						}
						}

					break;
				}
				case FD_ACCEPT:
				{
					TMP_Socket= accept(TCP_Socket,(SOCKADDR *)&amp;TCPClient,&amp;nSize);					

					if(TMP_Socket==INVALID_SOCKET)
						MessageBox(0,&quot;error verbunden&quot;,0,0);

					for(int i=0; i&lt;(MAX_BUFLEN-5); ++i)
					{
						if(!feof(sendfile))
						readbuf[i]=fgetc(sendfile);
						else
						{i--;
						break;
						}
					}

					if(!ferror(sendfile)&amp;&amp;i&gt;0)
					{
						char sbuffer[MAX_BUFLEN];
						sprintf(sbuffer,&quot;%04i&quot;,i);

						for(int j=4; j&lt;(i+4); j++)
							sbuffer[j]=readbuf[j-4];
						if(send(TMP_Socket,sbuffer,i+4,0)!=i+4)
							MessageBox(0,&quot;send error&quot;,0,0);
					}
					else
						MessageBox(0,&quot;fehler beim lesen der datei&quot;,0,0);
					SetTimer(hWnd,0,1000,0);
					SetWindowText(hStaTime,&quot;0&quot;);
					if(feof(sendfile))
					{
						send(TMP_Socket,&quot;0008][ende][&quot;,12,0);
						KillTimer(hWnd,0);
					}

					break;

				}
				case FD_CLOSE:
				{
					closesocket(TMP_Socket);
					break;
				}
			}
			break;
		}	
   case WM_TIMER:
	   {
		   ++istime;
		   char buf[64];
		   sprintf(buf,&quot;%i&quot;,istime);
		   SetWindowText(hStaTime,buf);

		   break;
	   }
   case WM_DESTROY:
	   {
			PostQuitMessage (0);
			return (0);
	   }
   }

   return DefWindowProc (hWnd, message, wParam, lParam);
}
</code></pre>
<p>header.h</p>
<pre><code>#include &lt;windows.h&gt;
#include &lt;windef.h&gt;
#include &lt;stdio.h&gt;
#undef _WINDOWS_
#include &lt;afxsock.h&gt;

#define TCP_SOCKET_MSG WM_APP+21
#define TCP_Port 36953
#define MAX_BUFLEN 9000 ///////////////// DIE ALLES ENTSCHEIDENDE BUFFERGROESSE

static char szAppName[] = &quot;fileserver&quot;;
static int x=500;
static int y=500;

int err;
int laenge;
int buflaenge;
int istime=0;
char buffer[MAX_BUFLEN];
char recv_buffer[MAX_BUFLEN];
char readbuf[MAX_BUFLEN];

static SOCKET TCP_Socket=INVALID_SOCKET;
static SOCKET TMP_Socket=INVALID_SOCKET;
static SOCKET TMP_Friend=INVALID_SOCKET;
static SOCKADDR_IN TCPServer={0};
static SOCKADDR_IN TCPClient={0};

int nSize=sizeof(SOCKADDR_IN);

int startWinsock(void)
{
	WSADATA wsa;		
	return WSAStartup(MAKEWORD(2,0),&amp;wsa);
}

void StartServer(HWND hWnds)
{
	startWinsock();

	if(TCP_Socket!= INVALID_SOCKET)
		closesocket(TCP_Socket);

	TCP_Socket = socket(AF_INET,SOCK_STREAM,0);

	TCPServer.sin_family = AF_INET; 
	TCPServer.sin_addr.s_addr = htonl(INADDR_ANY); 
	TCPServer.sin_port = htons(TCP_Port); 

	err = bind(TCP_Socket,(SOCKADDR FAR *)&amp;TCPServer,sizeof(SOCKADDR_IN)); 

	if (SOCKET_ERROR == err) 
	{ 
		MessageBox(hWnds,&quot;Failed to start TCP-Server&quot;, &quot;Error&quot;, MB_OK);
	} 

	err =listen(TCP_Socket,SOMAXCONN);

	WSAAsyncSelect(TCP_Socket, hWnds, TCP_SOCKET_MSG, FD_ACCEPT | FD_READ | FD_CLOSE);
}

int sendV(SOCKET TCP_SOC,char* BufferToSend)
{
	char buffer[MAX_BUFLEN];
	int x=0;

	int buflaenge=0;
	buflaenge=strlen(BufferToSend);
	if(buflaenge&gt;MAX_BUFLEN)
		return -1;

	sprintf(buffer,&quot;%04i%s&quot;,buflaenge,BufferToSend);

	return send(TCP_SOC,buffer,buflaenge+4,0);

}

void CommandWorker(char* buffer)
{

}
</code></pre>
<p>so ich hoffe ihr könnt den fehler finden, bin für alles offen.<br />
Sobald sich der client verbunden hat, schließt sich der server, also beendet sich selbst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":-("
      alt="😞"
    /> es kommt auch kein error...<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="🙂"
    /><br />
danke schonmal,<br />
mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342051</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342051</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 10 Aug 2007 09:41:07 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Filetransfer via tcp protocol on Fri, 10 Aug 2007 11:28:10 GMT]]></title><description><![CDATA[<p>Undertaker schrieb:</p>
<blockquote>
<p>geeky schrieb:</p>
<blockquote>
<p>Winsock selbst hat unabhängig vom TCP/IP-Stack auch nochmal Puffer (siehe z.B. setsockopt() und SO_RCVBUF...).</p>
</blockquote>
<p>das ist doch bestimmt der gleiche buffer, ansonsten wär's ja doppelt gemoppelt und mit unnötigen buffer-umschaufeleien verbunden...<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>
</blockquote>
<p>msdn schrieb:</p>
<blockquote>
<p>SO_RCVBUF int Specifies the total per-socket buffer space reserved for receives. This is unrelated to SO_MAX_MSG_SIZE and does not necessarily correspond to the size of the TCP receive window.</p>
</blockquote>
<p>WinSock ist ja noch ne Schicht über TCP/IP und kann statt TCP/IP auch was anderes als drunterliegende Schicht nutzen. Von daher wird Buffer rumkopiererei eh nötig sein <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=";D"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342147</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342147</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Fri, 10 Aug 2007 11:28:10 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Filetransfer via tcp protocol on Fri, 10 Aug 2007 11:34:09 GMT]]></title><description><![CDATA[<p>hmm also ich hab jetzt noch ein bisschen rumprobiert, jetzt läufts über netzwerk auch einwandfrei mit 32k buffer <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="🙂"
    /> falls jemand den code doch noch sehen möchte eventuell sagen...</p>
<p>danke an alle,<br />
mfg<br />
mitos</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342152</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342152</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 10 Aug 2007 11:34:09 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Filetransfer via tcp protocol on Fri, 10 Aug 2007 12:40:14 GMT]]></title><description><![CDATA[<p>Eieiei ist der Code schlecht. :kotz:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342186</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342186</guid><dc:creator><![CDATA[hustenbär]]></dc:creator><pubDate>Fri, 10 Aug 2007 12:40:14 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Filetransfer via tcp protocol on Fri, 10 Aug 2007 12:59:29 GMT]]></title><description><![CDATA[<p>naja sowas kannst du dir echt sparen... wiealt bist du? 14? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Nehme konstruktive kritik allerdings gern an...<br />
mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342200</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 10 Aug 2007 12:59:29 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Filetransfer via tcp protocol on Fri, 10 Aug 2007 16:00:00 GMT]]></title><description><![CDATA[<blockquote>
<p>Im Blocking-Modus wartet send immer bis alles weitergereicht wurde.</p>
</blockquote>
<p>Das ist das beobachtbare Verhalten, aber nicht das dokumentierte Verhalten.<br />
Wer sich nach beobachtbarem Verhalten richten möchte, und damit riskiert dass es irgendwann irgendwo nichtmehr geht... bittesehr. Ich richte mich nach der Doku.</p>
<p>p.S.: falls es irgendwo im Kleingedruckten in der Doku stehen sollte würde es mich interessieren den entsprechenden Teil zu lesen, in dem Fall würde ich mich über nen Link/Hinweis freuen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342312</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 10 Aug 2007 16:00:00 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Filetransfer via tcp protocol on Fri, 10 Aug 2007 16:28:58 GMT]]></title><description><![CDATA[<p>naja also er funktioniert jetzt doch nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title="=("
      alt="😞"
    /> oft gehts oft nicht, exe dateien mag er überhaupt nicht gern verschicken...<br />
Hat niemand n tutorial bzw. ein projekt, da wos richtig gut funktioniert!?</p>
<p>danke,<br />
mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342320</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 10 Aug 2007 16:28:58 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Filetransfer via tcp protocol on Fri, 10 Aug 2007 16:33:14 GMT]]></title><description><![CDATA[<p>geeky schrieb:</p>
<blockquote>
<p>Undertaker schrieb:</p>
<blockquote>
<p>geeky schrieb:</p>
<blockquote>
<p>Winsock selbst hat unabhängig vom TCP/IP-Stack auch nochmal Puffer (siehe z.B. setsockopt() und SO_RCVBUF...).</p>
</blockquote>
<p>das ist doch bestimmt der gleiche buffer, ansonsten wär's ja doppelt gemoppelt und mit unnötigen buffer-umschaufeleien verbunden...<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>
</blockquote>
<p>msdn schrieb:</p>
<blockquote>
<p>SO_RCVBUF int Specifies the total per-socket buffer space reserved for receives. This is unrelated to SO_MAX_MSG_SIZE and does not necessarily correspond to the size of the TCP receive window.</p>
</blockquote>
<p>WinSock ist ja noch ne Schicht über TCP/IP und kann statt TCP/IP auch was anderes als drunterliegende Schicht nutzen. Von daher wird Buffer rumkopiererei eh nötig sein <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=";D"
      alt="😉"
    /></p>
</blockquote>
<p>klar, socket sind die benutzerstelle zu TCP, aber trotzdem glaube ich nicht, dass sockets <em>und</em> TCP getrennte buffer haben. was hätte das für einen sinn? es wird vielmehr so sein, dass ein socket seine buffer (für send und recv) verwaltet und TCP am anderen ende hängt und daten ausliest bzw. hineinschreibt.<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/1342323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342323</guid><dc:creator><![CDATA[Undertaker]]></dc:creator><pubDate>Fri, 10 Aug 2007 16:33:14 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Filetransfer via tcp protocol on Sat, 11 Aug 2007 00:31:34 GMT]]></title><description><![CDATA[<p>versuchs doch erst mal mit blocking sockets zu realisieren, ist einfacher zu durchblicken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342541</guid><dc:creator><![CDATA[h1]]></dc:creator><pubDate>Sat, 11 Aug 2007 00:31:34 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] Filetransfer via tcp protocol on Sat, 11 Aug 2007 09:33:30 GMT]]></title><description><![CDATA[<p>naja ich kenn mich bei den arten nicht so aus... was genau ist der blocking socket? bzw. wie kann ich ihn realisieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342609</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 11 Aug 2007 09:33:30 GMT</pubDate></item></channel></rss>