<?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[TCP Socket Datei übertragen]]></title><description><![CDATA[<p>Ich bin gerade dabei, mich in die Win Socket Programmierung einzuarbeiten. Jetzt will ich mir als kleine Übung ein Programm basteln, welches eine beliebige Datei an den Server sendet. Das Prinzip müsste ja eigentlich so sein:<br />
-Client öffnet beliebige Datei und liest den Inhalt in einen Buffer<br />
-Server erstellt gleichnamige Datei und wartet auf den Buffer vom Client<br />
-Client sendet den Buffer<br />
-Server empfängt diesen und schreibt ihn in die Datei und schließt sie</p>
<p>Das ganze habe ich dann mal so umgesetzt:<br />
Client:</p>
<pre><code class="language-cpp">int y;
f.Open( &quot;datei.txt&quot;, CFile::modeRead);
while( true)
{
  ZeroMemory(buf,sizeof(buf));
  recv(s,buf,5,0);
  if( strcmp(buf, &quot;next&quot;) == 0)
  {
    ZeroMemory(buf,sizeof(buf));
    y=f.Read( buf, 1024);
/* Es werden 1024 Zeichen eingelesen, da die Buffer Variable ein char mit 1024 Feldern ist */
    send( s, buf, sizeof( buf), 0);
    if( y&lt;1024)
    {
      break;
    }
  }
}
f.Close();
send( s, &quot;finish&quot;, 7, 0);
</code></pre>
<p>Server:</p>
<pre><code class="language-cpp">f.Open( &quot;datei.txt&quot;, CFile::modeCreate | CFile::modeWrite);
while( true)
{
  ZeroMemory(buf,sizeof(buf));
  send(connectedSocket,&quot;next&quot;,5,0);
  recv(connectedSocket,buf,sizeof(buf),0);
  if(strcmp(buf, &quot;finish&quot;) == 0)
    break;
  f.Write( buf, sizeof(buf));
}
f.Close();
</code></pre>
<p>Mit Text-Dateien funktioniert das Ganze auch wunderbar, bei .exe Dateien werden aber nur die ersten paar Zeichen kopiert. Weiß jemand woran das liegen könnte?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/201989/tcp-socket-datei-übertragen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 01:22:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/201989.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 06 Jan 2008 13:28:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to TCP Socket Datei übertragen on Sun, 06 Jan 2008 20:20:15 GMT]]></title><description><![CDATA[<p>Ich bin gerade dabei, mich in die Win Socket Programmierung einzuarbeiten. Jetzt will ich mir als kleine Übung ein Programm basteln, welches eine beliebige Datei an den Server sendet. Das Prinzip müsste ja eigentlich so sein:<br />
-Client öffnet beliebige Datei und liest den Inhalt in einen Buffer<br />
-Server erstellt gleichnamige Datei und wartet auf den Buffer vom Client<br />
-Client sendet den Buffer<br />
-Server empfängt diesen und schreibt ihn in die Datei und schließt sie</p>
<p>Das ganze habe ich dann mal so umgesetzt:<br />
Client:</p>
<pre><code class="language-cpp">int y;
f.Open( &quot;datei.txt&quot;, CFile::modeRead);
while( true)
{
  ZeroMemory(buf,sizeof(buf));
  recv(s,buf,5,0);
  if( strcmp(buf, &quot;next&quot;) == 0)
  {
    ZeroMemory(buf,sizeof(buf));
    y=f.Read( buf, 1024);
/* Es werden 1024 Zeichen eingelesen, da die Buffer Variable ein char mit 1024 Feldern ist */
    send( s, buf, sizeof( buf), 0);
    if( y&lt;1024)
    {
      break;
    }
  }
}
f.Close();
send( s, &quot;finish&quot;, 7, 0);
</code></pre>
<p>Server:</p>
<pre><code class="language-cpp">f.Open( &quot;datei.txt&quot;, CFile::modeCreate | CFile::modeWrite);
while( true)
{
  ZeroMemory(buf,sizeof(buf));
  send(connectedSocket,&quot;next&quot;,5,0);
  recv(connectedSocket,buf,sizeof(buf),0);
  if(strcmp(buf, &quot;finish&quot;) == 0)
    break;
  f.Write( buf, sizeof(buf));
}
f.Close();
</code></pre>
<p>Mit Text-Dateien funktioniert das Ganze auch wunderbar, bei .exe Dateien werden aber nur die ersten paar Zeichen kopiert. Weiß jemand woran das liegen könnte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431771</guid><dc:creator><![CDATA[naeron]]></dc:creator><pubDate>Sun, 06 Jan 2008 20:20:15 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Socket Datei übertragen on Sun, 06 Jan 2008 13:37:34 GMT]]></title><description><![CDATA[<p>Du benutzt mehrfach strlen() dieses zählt die Zeichen bis zum ersten 0-Byte (\0). Das Stringende wird in einem char-Array durch ein solches 0-Byte angezeigt.<br />
In einer exe-Datei kann das 0-Byte an beliebiger Stelle auftauchen. Daher bricht deine Übertragung beim ersten 0-Byte ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431778</guid><dc:creator><![CDATA[O.o]]></dc:creator><pubDate>Sun, 06 Jan 2008 13:37:34 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Socket Datei übertragen on Sun, 06 Jan 2008 13:52:43 GMT]]></title><description><![CDATA[<p>Ich hab jetzt mal alle strlen durch sizeof ersetzt. Jetzt werden die Daten zwar korrekt übertragen, aber die Abbruchbedingung im Client: sizeof(buf)&lt;1024 wird nicht mehr erfüllt, sodass der Inhalt der Datei etliche Male verschickt wird. Weiß jemand, woran das liegen könnte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431790</guid><dc:creator><![CDATA[naeron]]></dc:creator><pubDate>Sun, 06 Jan 2008 13:52:43 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Socket Datei übertragen on Sun, 06 Jan 2008 14:07:09 GMT]]></title><description><![CDATA[<p>sizeof(buf) liefert IMMER 1024 zurück, da es nur die Größe von 'buf' ermittelt, aber nicht die Größe der sinnvollen Daten in 'buf'.</p>
<p>CFile::Read() liefert im return-Wert, wieviele Byte tatsächlich gelesen wurden. Dies solltest du überprüfen.</p>
<p><a href="http://msdn2.microsoft.com/en-us/library/ctka0kks(VS.80).aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/ctka0kks(VS.80).aspx</a></p>
<p>MSDN schrieb:</p>
<blockquote>
<p>Return Value: The number of bytes transferred to the buffer.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1431799</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431799</guid><dc:creator><![CDATA[O.o]]></dc:creator><pubDate>Sun, 06 Jan 2008 14:07:09 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Socket Datei übertragen on Sun, 06 Jan 2008 14:21:05 GMT]]></title><description><![CDATA[<p>Wow, vielen dank! Es klappt endlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431809</guid><dc:creator><![CDATA[naeron]]></dc:creator><pubDate>Sun, 06 Jan 2008 14:21:05 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Socket Datei übertragen on Sun, 06 Jan 2008 15:08:15 GMT]]></title><description><![CDATA[<p>Kannst du mal deinen Server und Client in aktueller Version posten?<br />
Bei mir sendet der Client unendlich, wenn er keine aktive Gegenstelle<br />
findet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431842</guid><dc:creator><![CDATA[Archery]]></dc:creator><pubDate>Sun, 06 Jan 2008 15:08:15 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Socket Datei übertragen on Sun, 06 Jan 2008 20:20:42 GMT]]></title><description><![CDATA[<p>Hab meine Lösung nochmal reineditiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1432087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1432087</guid><dc:creator><![CDATA[naeron]]></dc:creator><pubDate>Sun, 06 Jan 2008 20:20:42 GMT</pubDate></item><item><title><![CDATA[Reply to TCP Socket Datei übertragen on Sun, 06 Jan 2008 22:47:53 GMT]]></title><description><![CDATA[<p>rückgabewert von recv MUSS geprüft werden</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1432147</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1432147</guid><dc:creator><![CDATA[ip]]></dc:creator><pubDate>Sun, 06 Jan 2008 22:47:53 GMT</pubDate></item></channel></rss>