<?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[Datei senden]]></title><description><![CDATA[<p>Hallo, ich versuche schon lange eine Datei übers Netzwerk zu übertragen (mit Winsock).Dazu lese ich sie zuerst ein, sende dann die Größe an den Server, der empfängt die Datei in einer Schleife, weil recv() Daten oft nicht in einem Rutsch empfängt.</p>
<p>Hier der Code zum Senden (Client) :</p>
<pre><code class="language-cpp">char* buf;
int tosend = 0; //Dateigröße
ifstream les;
tosend = getfilesize(&quot;test.mp3&quot;);
cout &lt;&lt; endl &lt;&lt; endl &lt;&lt; tosend &lt;&lt; &quot; Bytes werden gesendet!\n\n&quot;;
buf = new char[tosend+1];
les.open(&quot;test.mp3&quot;,ios::in|ios::binary); //binär öffnen
les.read(buf,tosend); 
les.close();
send(s,buf,tosend,0); //Datei übertragen
cout &lt;&lt; &quot;Datei gesendet !\n\n\n&quot;;
</code></pre>
<p>Hier der Code zum Empfangen (Server) :</p>
<pre><code class="language-cpp">ofstream schreib;
int filesize = 0;
int empfangen = 0;
recvint(filesize,10); //Diese Funktion wandelt einen char[],den es über recv() empfängt in int um
while(empfangen &lt; filesize) //Schleife zum Empfangen
{ 
empfangen += recv(s, buf+empfangen, filesize - empfangen, 0);
}
schreib.open(&quot;test.mp3&quot;,ios::out|ios::binary);
schreib.write(buf,filesize); //Datenstream wieder in Datei schreiben
schreib.close();
</code></pre>
<p>Die Datei ist nach dem Übertragen gleich groß und auch vom Inhalt her fast gleich, aber einige Bytes werden falsch übertragen ich weiß nicht warum??<br />
Wenn jemand das Problem kennt oder einen Code zum Übertragen von Dateien hat, bitte zurückschreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/306022/datei-senden</link><generator>RSS for Node</generator><lastBuildDate>Sat, 08 Aug 2026 12:07:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/306022.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 15 Jul 2012 18:41:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Datei senden on Sun, 15 Jul 2012 18:41:50 GMT]]></title><description><![CDATA[<p>Hallo, ich versuche schon lange eine Datei übers Netzwerk zu übertragen (mit Winsock).Dazu lese ich sie zuerst ein, sende dann die Größe an den Server, der empfängt die Datei in einer Schleife, weil recv() Daten oft nicht in einem Rutsch empfängt.</p>
<p>Hier der Code zum Senden (Client) :</p>
<pre><code class="language-cpp">char* buf;
int tosend = 0; //Dateigröße
ifstream les;
tosend = getfilesize(&quot;test.mp3&quot;);
cout &lt;&lt; endl &lt;&lt; endl &lt;&lt; tosend &lt;&lt; &quot; Bytes werden gesendet!\n\n&quot;;
buf = new char[tosend+1];
les.open(&quot;test.mp3&quot;,ios::in|ios::binary); //binär öffnen
les.read(buf,tosend); 
les.close();
send(s,buf,tosend,0); //Datei übertragen
cout &lt;&lt; &quot;Datei gesendet !\n\n\n&quot;;
</code></pre>
<p>Hier der Code zum Empfangen (Server) :</p>
<pre><code class="language-cpp">ofstream schreib;
int filesize = 0;
int empfangen = 0;
recvint(filesize,10); //Diese Funktion wandelt einen char[],den es über recv() empfängt in int um
while(empfangen &lt; filesize) //Schleife zum Empfangen
{ 
empfangen += recv(s, buf+empfangen, filesize - empfangen, 0);
}
schreib.open(&quot;test.mp3&quot;,ios::out|ios::binary);
schreib.write(buf,filesize); //Datenstream wieder in Datei schreiben
schreib.close();
</code></pre>
<p>Die Datei ist nach dem Übertragen gleich groß und auch vom Inhalt her fast gleich, aber einige Bytes werden falsch übertragen ich weiß nicht warum??<br />
Wenn jemand das Problem kennt oder einen Code zum Übertragen von Dateien hat, bitte zurückschreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2233020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2233020</guid><dc:creator><![CDATA[ehauser]]></dc:creator><pubDate>Sun, 15 Jul 2012 18:41:50 GMT</pubDate></item><item><title><![CDATA[Reply to Datei senden on Sun, 15 Jul 2012 19:01:33 GMT]]></title><description><![CDATA[<p>Es ist nicht sehr viel Code aber das was ich sehe ist, dass die Länge des Files nicht gesendet wird, jedoch wird die File Länge empfangen.</p>
<p>Theoretisch bedeutet das, dass es so ungefähr Zufall ist, was als Länge des Files auf der Empfangsseite angesehen wird. Es kann nicht gut gehen.</p>
<p>BTW: Ev. hilft dir mein Post aus folgendem Thread <a href="http://www.c-plusplus.net/forum/296436-full" rel="nofollow">http://www.c-plusplus.net/forum/296436-full</a></p>
<p>Auserdem:<br />
Es fehlt ein delete[]. std::vector wäre eine gute Lösung um um das new[]/delete[] herumzukommen.</p>
<p><strong>Edit</strong><br />
Ausserdem2: Falls recvint(.., 10) bedeuted, dass 10 char empfangen und in ein int umgewandelt wird, muss das auf der Server Seite auch so gesendet werden. Andernfalls würde ich sizeof(int) empfangen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2233023</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2233023</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sun, 15 Jul 2012 19:01:33 GMT</pubDate></item><item><title><![CDATA[Reply to Datei senden on Sun, 15 Jul 2012 19:27:59 GMT]]></title><description><![CDATA[<p>Nein, ich übermittle die Dateigröße schon,aber den gesamten Code zu posten wäre schlecht (riesig).Es soll ein Telnet-Server werden, der auch Dateien übertragen kann.<br />
Ich hab vorhin nur einen kleinen Teil gepostet, weil ich mir für Sockets eine eigene Klasse geschrieben habe (die mir die &quot;Drecksarbeit&quot; abnimmt).An der Funktion recvint(filesize,10) liegt es nicht,das heißt nur, dass eine Zahl mit maximal 10 Stellen gesendet werden kann.<br />
Ich vermute,dass es vielleicht an der send() Funktion liegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2233030</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2233030</guid><dc:creator><![CDATA[ehauser]]></dc:creator><pubDate>Sun, 15 Jul 2012 19:27:59 GMT</pubDate></item><item><title><![CDATA[Reply to Datei senden on Sun, 15 Jul 2012 19:30:30 GMT]]></title><description><![CDATA[<p>Also wie gesagt, ich hab vergessen, beim Client fehlt noch sendint(filesize,10);<br />
Also daran kann es auch noch liegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2233031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2233031</guid><dc:creator><![CDATA[ehauser]]></dc:creator><pubDate>Sun, 15 Jul 2012 19:30:30 GMT</pubDate></item><item><title><![CDATA[Reply to Datei senden on Sun, 15 Jul 2012 19:33:09 GMT]]></title><description><![CDATA[<p>Ok, ich hab jetzt den Befehl für die Übertragung der Dateigröße noch eingebaut, aber die Datei wird immer nich fehlerhaft übertragen ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2233034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2233034</guid><dc:creator><![CDATA[ehauser]]></dc:creator><pubDate>Sun, 15 Jul 2012 19:33:09 GMT</pubDate></item><item><title><![CDATA[Reply to Datei senden on Sun, 15 Jul 2012 20:26:08 GMT]]></title><description><![CDATA[<p>Zeige doch mal die Implementation von sendint(..) und recvint(..). Ausserdem könntest Du den Rückgabewert von send(..) prüfen und den Rückgabewert von recv(..) auf Error / Verbindungsabbruch testen.</p>
<p>Anmerkung:<br />
In meinem vorherigen Beitrag habe ich die Server und Client Seite verwechselt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2233041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2233041</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sun, 15 Jul 2012 20:26:08 GMT</pubDate></item><item><title><![CDATA[Reply to Datei senden on Mon, 16 Jul 2012 08:12:20 GMT]]></title><description><![CDATA[<p>Du kannst auch mal mit Wireshark oder ähnlichen Tools nachsehen, was denn tatsächlich gesendet wird. Ansonsten helfen vielleicht Debug-Ausgaben bezüglich der auf Empfängerseite empfangenen Daten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2233104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2233104</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Mon, 16 Jul 2012 08:12:20 GMT</pubDate></item><item><title><![CDATA[Reply to Datei senden on Mon, 16 Jul 2012 15:38:36 GMT]]></title><description><![CDATA[<p>Danke theta! Ich hab mal den Rückgabewert von send() ausgeben lassen und er war kleiner als die Dateigröße.Jetzt hab ich den send() Befehl auch noch in ne Schleife gepackt, solange bis alles gesendet wird.Bei so großen Datenmengen braucht man so etwas anscheinend. Auf jeden Fall funktioniert es jetzt SUPER!<br />
Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2233245</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2233245</guid><dc:creator><![CDATA[ehauser]]></dc:creator><pubDate>Mon, 16 Jul 2012 15:38:36 GMT</pubDate></item></channel></rss>