<?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[Filetransfer via Winsock TCP Sockets... Klappt nicht einwansfrei!]]></title><description><![CDATA[<p>Hallo! Naja mein Problem ist einfach auszudrücken. Ich rufe SendFile auf um über einen Socket eine Datei zu senden zu einem Clienten, der eine andere Funktion aufruft, die die Datei empfangen soll. Damals hatte ich es auf diesem Wege irgendwie hinbekommen, einwandfreier Datenverkehr, aber nun... Näheres gleich dazu... Schaut Euch erst mal die wichtigsten Codes an:<br />
(fopen zum öffnen der datei die gesendet/empfangen werden soll findet vorher wo anders statt!!!)...</p>
<pre><code class="language-cpp">// SEND FUNKTION DES SERVERSvoid __cdecl SendFile(void *)
{
	char szMsg[MAX_PATH];
	char szClientNo[MAX_PATH];

	strcpy(szClientNo, szUsedNo);
	sprintf(szMsg, &quot;%s%s&quot;, szSendFrom, szSendFile);

	SendMessage(GetDlgItem(hFile, IDC_PROGRESS), PBM_SETRANGE32, 0, lSendSize);
	FILE* fFile2;
	SendMessage(GetDlgItem(hFile, IDC_PROGRESS), PBM_SETPOS, (WPARAM)0, (LPARAM)0);
	SetTimer(hFile, 0, 1000, NULL);
	if((fFile2 = fopen(szMsg, &quot;rb&quot;)) != 0)
	{
		char szBytesSent[MAX_PATH];
		char szPercent[MAX_PATH];
		char szBuffer[1024];
		lBytesSent = 0;
		int    iProzent = 0;
		double dProzent = 0;
		while(!feof(fFile2))
		{
			if(bFileTransfer)
			{
				long lBytesRead = fread(szBuffer, 1, sizeof(szBuffer), fFile2);
				long lBytesCurrentSent = 0;
				lBytesSent += lBytesRead;
				if(lBytesRead &gt; 0)
				{
					while(lBytesCurrentSent != lBytesRead)
					{
						long lNowSent = send(GetSocket2ByNo(szClientNo), szBuffer + lBytesCurrentSent, lBytesRead-lBytesCurrentSent, 0);
						if(lNowSent == SOCKET_ERROR &amp;&amp; WSAGetLastError() != WSAEWOULDBLOCK)
						{
							char szError[MAX_PATH];
							sprintf(szError, &quot;%i&quot;, WSAGetLastError());
							MessageBox(NULL, szError, NULL, NULL);
							_endthread();
						}
						lBytesCurrentSent += lNowSent;
					}
				}
				sprintf(szBytesSent, &quot;%i/%i&quot;, lBytesSent, lSendSize);
				SetDlgItemText(hFile, IDC_INFO5, szBytesSent);
				SendMessage(GetDlgItem(hFile, IDC_PROGRESS), PBM_SETPOS, (WPARAM)lBytesSent, (LPARAM)0l);
				dProzent = dProzent + lBytesRead;
				iProzent = dProzent / lSendSize * 100;
				sprintf(szPercent, &quot;%i%%&quot;, iProzent);
				SetDlgItemText(hFile, IDC_INFO7, szPercent);
			}
			else
			{
				//WriteChatMessage(&quot;[PROGRAMM] Die Dateiübertragung wurde abgebrochen.&quot;, hTempDlg);
				break;
			}
		}
		fclose(fFile2);
		if(bFileTransfer)
		{
			bFileTransfer = false;
			SetDlgItemText(hFile, IDCANCEL,  &quot;Schließen&quot;);
			send(GetSocketByNo(szClientNo), &quot;BFW_SENDDONE\n&quot;, strlen(&quot;BFW_SENDDONE\n&quot;), 0);
			sprintf(szMsg, &quot;Filetransfer '%s%s' into '%s' successfully finished.&quot;, szSendFrom, szSendFile, szSendPath);
			ListView_InsertItemEx(GetDlgItem(hControl, IDC_LIST2), NULL, NULL, NULL, NULL, NULL, szMsg, NULL, 2, -1);
			SetDlgItemText(hFile, IDC_INFO6, &quot;Done.&quot;);
		}
	}
</code></pre>
<pre><code class="language-cpp">// RECEIVE FUNKTION DES CLIENTEN
void __cdecl RecvFile(void *)
{
	char szRecvData[MAX_PATH];
	long lReceived = 0;

	while(lReceived != SOCKET_ERROR &amp;&amp; bRunWhile)
	{
		lReceived = recv(sckSocket2, szRecvData, MAX_PATH, 0);
		if(lReceived == -1)
		{
			char szMsg[MAX_PATH];
			sprintf(szMsg, &quot;WSALastError = %i\nlReceived = -1&quot;, WSAGetLastError());
			MessageBox(NULL, szMsg, &quot;röfl nen fehler&quot;, NULL);
		}
		else if(lReceived == 0)
		{
			char szMsg[MAX_PATH];
			sprintf(szMsg, &quot;WSALastError = %i\nlReceived = 0&quot;, WSAGetLastError());
			MessageBox(NULL, szMsg, &quot;röfl nen fehler&quot;, NULL);
		}
		else if(lReceived == SOCKET_ERROR)
		{
			char szMsg[MAX_PATH];
			sprintf(szMsg, &quot;WSALastError = %i\nlReceived = SOCKET_ERROR&quot;, WSAGetLastError());
			MessageBox(NULL, szMsg, &quot;röfl nen fehler&quot;, NULL);
		}
		else if(szRecvData != NULL)
		{
			szRecvData[lReceived] = '\0';
			fwrite(szRecvData, 1, lReceived, fFile);
		}
	}
	_endthread();
}
</code></pre>
<p>So nun solltet Ihr noch sehen, wie ich die Sockets erstelle:</p>
<pre><code class="language-cpp">// BEIM CLIENTEN:
char szMsg[MAX_PATH];

	SOCKADDR_IN sockaddr_in;

	closesocket(sckSocket2);

	if((sckSocket2 = socket(AF_INET, SOCK_STREAM, 0)) != INVALID_SOCKET)
	{
		HOSTENT *host = gethostbyname(szIP);
		memset(&amp;sockaddr_in, 0, sizeof(SOCKADDR_IN));
		sockaddr_in.sin_family      = AF_INET;
		sockaddr_in.sin_port        = htons((u_short)atof(szPort));
		sockaddr_in.sin_addr.s_addr = ((IN_ADDR*)host-&gt;h_addr)-&gt;s_addr;
		if((connect(sckSocket2, (SOCKADDR *)&amp;sockaddr_in, sizeof(SOCKADDR_IN))) != SOCKET_ERROR)
		{
			bRunWhile = true;
			_beginthread(RecvFile, 0, NULL);
		}
	}
	else MessageBox(NULL, &quot;Socket create error.&quot;, NULL, NULL);
</code></pre>
<pre><code class="language-cpp">// BEIM SERVER:

closesocket(sckSocket2);
	if((sckSocket2 = socket(AF_INET, SOCK_STREAM, 0)) != INVALID_SOCKET)
	{
		memset(&amp;sockaddr_in, 0, sizeof(SOCKADDR_IN));
		sockaddr_in.sin_family		= AF_INET;
		sockaddr_in.sin_port		= htons((u_short)atof(szSPort2));
		sockaddr_in.sin_addr.s_addr = (u_long) 0x00000000;
		if(bind(sckSocket2, (SOCKADDR*)&amp;sockaddr_in, sizeof(SOCKADDR_IN)) != SOCKET_ERROR)
		 if(listen(sckSocket2, 10) != SOCKET_ERROR) WSAAsyncSelect(sckSocket2, hMainWnd, SOCKET_NOTIFY2, FD_ACCEPT);
	}
</code></pre>
<p>So. Wenn ich eine Datei sende, steht in meiner Statusanzeige im Programm ca. so ein Wert:</p>
<p>Gesendet: 9411/23358233 Bytes. Also so z.B! Hmm naja und dann wird auch schon sofort</p>
<p>if(lReceived == -1)<br />
{<br />
char szMsg[MAX_PATH];<br />
sprintf(szMsg, &quot;WSALastError = %i\nlReceived = -1&quot;, WSAGetLastError());<br />
MessageBox(NULL, szMsg, &quot;röfl nen fehler&quot;, NULL);<br />
}</p>
<p>das heir aufgerufen! das heißt laut msdn:</p>
<p>WSAECONNRESET<br />
10054<br />
Connection reset by peer.<br />
An existing connection was forcibly closed by the remote host. This normally results if the peer application on the remote host is suddenly stopped, the host is rebooted, the host or remote network interface is disabled, or the remote host uses a hard close (see setsockopt for more information on the SO_LINGER option on the remote socket). This error may also result if a connection was broken due to keep-alive activity detecting a failure while one or more operations are in progress. Operations that were in progress fail with WSAENETRESET. Subsequent operations fail with WSAECONNRESET.</p>
<p>Ich verstehe die Welt nicht mehr!!! Seht Ihr einen Fehler???</p>
<p>P.S.: Also was ich sicher weiß, eine Verbindung wird sauber hergestellt! Nur während der Übertragung, da geht was schief!!!</p>
<p>DANKE! Chris</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/54273/filetransfer-via-winsock-tcp-sockets-klappt-nicht-einwansfrei</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Apr 2026 23:41:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/54273.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 05 Nov 2003 21:01:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Filetransfer via Winsock TCP Sockets... Klappt nicht einwansfrei! on Wed, 05 Nov 2003 21:01:18 GMT]]></title><description><![CDATA[<p>Hallo! Naja mein Problem ist einfach auszudrücken. Ich rufe SendFile auf um über einen Socket eine Datei zu senden zu einem Clienten, der eine andere Funktion aufruft, die die Datei empfangen soll. Damals hatte ich es auf diesem Wege irgendwie hinbekommen, einwandfreier Datenverkehr, aber nun... Näheres gleich dazu... Schaut Euch erst mal die wichtigsten Codes an:<br />
(fopen zum öffnen der datei die gesendet/empfangen werden soll findet vorher wo anders statt!!!)...</p>
<pre><code class="language-cpp">// SEND FUNKTION DES SERVERSvoid __cdecl SendFile(void *)
{
	char szMsg[MAX_PATH];
	char szClientNo[MAX_PATH];

	strcpy(szClientNo, szUsedNo);
	sprintf(szMsg, &quot;%s%s&quot;, szSendFrom, szSendFile);

	SendMessage(GetDlgItem(hFile, IDC_PROGRESS), PBM_SETRANGE32, 0, lSendSize);
	FILE* fFile2;
	SendMessage(GetDlgItem(hFile, IDC_PROGRESS), PBM_SETPOS, (WPARAM)0, (LPARAM)0);
	SetTimer(hFile, 0, 1000, NULL);
	if((fFile2 = fopen(szMsg, &quot;rb&quot;)) != 0)
	{
		char szBytesSent[MAX_PATH];
		char szPercent[MAX_PATH];
		char szBuffer[1024];
		lBytesSent = 0;
		int    iProzent = 0;
		double dProzent = 0;
		while(!feof(fFile2))
		{
			if(bFileTransfer)
			{
				long lBytesRead = fread(szBuffer, 1, sizeof(szBuffer), fFile2);
				long lBytesCurrentSent = 0;
				lBytesSent += lBytesRead;
				if(lBytesRead &gt; 0)
				{
					while(lBytesCurrentSent != lBytesRead)
					{
						long lNowSent = send(GetSocket2ByNo(szClientNo), szBuffer + lBytesCurrentSent, lBytesRead-lBytesCurrentSent, 0);
						if(lNowSent == SOCKET_ERROR &amp;&amp; WSAGetLastError() != WSAEWOULDBLOCK)
						{
							char szError[MAX_PATH];
							sprintf(szError, &quot;%i&quot;, WSAGetLastError());
							MessageBox(NULL, szError, NULL, NULL);
							_endthread();
						}
						lBytesCurrentSent += lNowSent;
					}
				}
				sprintf(szBytesSent, &quot;%i/%i&quot;, lBytesSent, lSendSize);
				SetDlgItemText(hFile, IDC_INFO5, szBytesSent);
				SendMessage(GetDlgItem(hFile, IDC_PROGRESS), PBM_SETPOS, (WPARAM)lBytesSent, (LPARAM)0l);
				dProzent = dProzent + lBytesRead;
				iProzent = dProzent / lSendSize * 100;
				sprintf(szPercent, &quot;%i%%&quot;, iProzent);
				SetDlgItemText(hFile, IDC_INFO7, szPercent);
			}
			else
			{
				//WriteChatMessage(&quot;[PROGRAMM] Die Dateiübertragung wurde abgebrochen.&quot;, hTempDlg);
				break;
			}
		}
		fclose(fFile2);
		if(bFileTransfer)
		{
			bFileTransfer = false;
			SetDlgItemText(hFile, IDCANCEL,  &quot;Schließen&quot;);
			send(GetSocketByNo(szClientNo), &quot;BFW_SENDDONE\n&quot;, strlen(&quot;BFW_SENDDONE\n&quot;), 0);
			sprintf(szMsg, &quot;Filetransfer '%s%s' into '%s' successfully finished.&quot;, szSendFrom, szSendFile, szSendPath);
			ListView_InsertItemEx(GetDlgItem(hControl, IDC_LIST2), NULL, NULL, NULL, NULL, NULL, szMsg, NULL, 2, -1);
			SetDlgItemText(hFile, IDC_INFO6, &quot;Done.&quot;);
		}
	}
</code></pre>
<pre><code class="language-cpp">// RECEIVE FUNKTION DES CLIENTEN
void __cdecl RecvFile(void *)
{
	char szRecvData[MAX_PATH];
	long lReceived = 0;

	while(lReceived != SOCKET_ERROR &amp;&amp; bRunWhile)
	{
		lReceived = recv(sckSocket2, szRecvData, MAX_PATH, 0);
		if(lReceived == -1)
		{
			char szMsg[MAX_PATH];
			sprintf(szMsg, &quot;WSALastError = %i\nlReceived = -1&quot;, WSAGetLastError());
			MessageBox(NULL, szMsg, &quot;röfl nen fehler&quot;, NULL);
		}
		else if(lReceived == 0)
		{
			char szMsg[MAX_PATH];
			sprintf(szMsg, &quot;WSALastError = %i\nlReceived = 0&quot;, WSAGetLastError());
			MessageBox(NULL, szMsg, &quot;röfl nen fehler&quot;, NULL);
		}
		else if(lReceived == SOCKET_ERROR)
		{
			char szMsg[MAX_PATH];
			sprintf(szMsg, &quot;WSALastError = %i\nlReceived = SOCKET_ERROR&quot;, WSAGetLastError());
			MessageBox(NULL, szMsg, &quot;röfl nen fehler&quot;, NULL);
		}
		else if(szRecvData != NULL)
		{
			szRecvData[lReceived] = '\0';
			fwrite(szRecvData, 1, lReceived, fFile);
		}
	}
	_endthread();
}
</code></pre>
<p>So nun solltet Ihr noch sehen, wie ich die Sockets erstelle:</p>
<pre><code class="language-cpp">// BEIM CLIENTEN:
char szMsg[MAX_PATH];

	SOCKADDR_IN sockaddr_in;

	closesocket(sckSocket2);

	if((sckSocket2 = socket(AF_INET, SOCK_STREAM, 0)) != INVALID_SOCKET)
	{
		HOSTENT *host = gethostbyname(szIP);
		memset(&amp;sockaddr_in, 0, sizeof(SOCKADDR_IN));
		sockaddr_in.sin_family      = AF_INET;
		sockaddr_in.sin_port        = htons((u_short)atof(szPort));
		sockaddr_in.sin_addr.s_addr = ((IN_ADDR*)host-&gt;h_addr)-&gt;s_addr;
		if((connect(sckSocket2, (SOCKADDR *)&amp;sockaddr_in, sizeof(SOCKADDR_IN))) != SOCKET_ERROR)
		{
			bRunWhile = true;
			_beginthread(RecvFile, 0, NULL);
		}
	}
	else MessageBox(NULL, &quot;Socket create error.&quot;, NULL, NULL);
</code></pre>
<pre><code class="language-cpp">// BEIM SERVER:

closesocket(sckSocket2);
	if((sckSocket2 = socket(AF_INET, SOCK_STREAM, 0)) != INVALID_SOCKET)
	{
		memset(&amp;sockaddr_in, 0, sizeof(SOCKADDR_IN));
		sockaddr_in.sin_family		= AF_INET;
		sockaddr_in.sin_port		= htons((u_short)atof(szSPort2));
		sockaddr_in.sin_addr.s_addr = (u_long) 0x00000000;
		if(bind(sckSocket2, (SOCKADDR*)&amp;sockaddr_in, sizeof(SOCKADDR_IN)) != SOCKET_ERROR)
		 if(listen(sckSocket2, 10) != SOCKET_ERROR) WSAAsyncSelect(sckSocket2, hMainWnd, SOCKET_NOTIFY2, FD_ACCEPT);
	}
</code></pre>
<p>So. Wenn ich eine Datei sende, steht in meiner Statusanzeige im Programm ca. so ein Wert:</p>
<p>Gesendet: 9411/23358233 Bytes. Also so z.B! Hmm naja und dann wird auch schon sofort</p>
<p>if(lReceived == -1)<br />
{<br />
char szMsg[MAX_PATH];<br />
sprintf(szMsg, &quot;WSALastError = %i\nlReceived = -1&quot;, WSAGetLastError());<br />
MessageBox(NULL, szMsg, &quot;röfl nen fehler&quot;, NULL);<br />
}</p>
<p>das heir aufgerufen! das heißt laut msdn:</p>
<p>WSAECONNRESET<br />
10054<br />
Connection reset by peer.<br />
An existing connection was forcibly closed by the remote host. This normally results if the peer application on the remote host is suddenly stopped, the host is rebooted, the host or remote network interface is disabled, or the remote host uses a hard close (see setsockopt for more information on the SO_LINGER option on the remote socket). This error may also result if a connection was broken due to keep-alive activity detecting a failure while one or more operations are in progress. Operations that were in progress fail with WSAENETRESET. Subsequent operations fail with WSAECONNRESET.</p>
<p>Ich verstehe die Welt nicht mehr!!! Seht Ihr einen Fehler???</p>
<p>P.S.: Also was ich sicher weiß, eine Verbindung wird sauber hergestellt! Nur während der Übertragung, da geht was schief!!!</p>
<p>DANKE! Chris</p>
]]></description><link>https://www.c-plusplus.net/forum/post/387651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/387651</guid><dc:creator><![CDATA[ChrisK]]></dc:creator><pubDate>Wed, 05 Nov 2003 21:01:18 GMT</pubDate></item><item><title><![CDATA[Reply to Filetransfer via Winsock TCP Sockets... Klappt nicht einwansfrei! on Mon, 22 Nov 2004 18:25:40 GMT]]></title><description><![CDATA[<p>Hi!<br />
Ich hatte mal sowas ähnliches...<br />
Wenn du die Datei mit</p>
<pre><code class="language-cpp">fopen(&quot;&lt;datei&gt;&quot;,&quot;r&quot;);
</code></pre>
<p>öffnest funktioniert das nicht...</p>
<p>Versuchs mal mit</p>
<pre><code class="language-cpp">fopen(&quot;&lt;datei&gt;&quot;,&quot;rb+&quot;);
</code></pre>
<p>dann müsste das funktionieren!</p>
<p>Logischerweise musst du die Dateien dann auch wieder mit</p>
<pre><code class="language-cpp">fopen(&quot;&lt;datei&gt;&quot;,&quot;wb+&quot;);
</code></pre>
<p>zum schreiben öffnen!</p>
<p>MfG.<br />
BlackViper</p>
]]></description><link>https://www.c-plusplus.net/forum/post/656793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/656793</guid><dc:creator><![CDATA[BlackViper]]></dc:creator><pubDate>Mon, 22 Nov 2004 18:25:40 GMT</pubDate></item><item><title><![CDATA[Reply to Filetransfer via Winsock TCP Sockets... Klappt nicht einwansfrei! on Mon, 22 Nov 2004 18:27:14 GMT]]></title><description><![CDATA[<p>...ich sehe gerade, dass du das bereits tust... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
sry</p>
]]></description><link>https://www.c-plusplus.net/forum/post/656795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/656795</guid><dc:creator><![CDATA[BlackViper]]></dc:creator><pubDate>Mon, 22 Nov 2004 18:27:14 GMT</pubDate></item><item><title><![CDATA[Reply to Filetransfer via Winsock TCP Sockets... Klappt nicht einwansfrei! on Mon, 22 Nov 2004 19:32:09 GMT]]></title><description><![CDATA[<p>frag doch mal hier: <a href="http://www.win-api.com" rel="nofollow">http://www.win-api.com</a></p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/656848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/656848</guid><dc:creator><![CDATA[hepü]]></dc:creator><pubDate>Mon, 22 Nov 2004 19:32:09 GMT</pubDate></item><item><title><![CDATA[Reply to Filetransfer via Winsock TCP Sockets... Klappt nicht einwansfrei! on Mon, 22 Nov 2004 21:02:43 GMT]]></title><description><![CDATA[<p>Wie groß ist die Datei und welche Meldungen gibt der Server aus?<br />
Für mich sieht es so aus, dass die der Server den socket wieder schließt, dann bekommt der Client diesen Fehler - evtl. also ein Fehler beim Server während des Lesens oder er ist damit fertig und killt die Verbindung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/656916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/656916</guid><dc:creator><![CDATA[ScriptGod]]></dc:creator><pubDate>Mon, 22 Nov 2004 21:02:43 GMT</pubDate></item></channel></rss>