<?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[Senden einer Datei]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich würde gerne eine Datei versenden.<br />
Zuerst lese ich eine Datei byteweise und schreibe sie dann auf den buffer.<br />
Problem: wie regle ich das mit dem Speicher?</p>
<p>Ich weiss ja nicht wieviel ich versenden werde und mit new und delete fällt mir da auch nichts ein, eig logisch da ja der buffer (bzw der String) als Einheit versendet wird.</p>
<p>Was kann man da machen?</p>
<p>Mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/172008/senden-einer-datei</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Jul 2026 14:44:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/172008.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 31 Jan 2007 14:51:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Senden einer Datei on Wed, 31 Jan 2007 14:51:18 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich würde gerne eine Datei versenden.<br />
Zuerst lese ich eine Datei byteweise und schreibe sie dann auf den buffer.<br />
Problem: wie regle ich das mit dem Speicher?</p>
<p>Ich weiss ja nicht wieviel ich versenden werde und mit new und delete fällt mir da auch nichts ein, eig logisch da ja der buffer (bzw der String) als Einheit versendet wird.</p>
<p>Was kann man da machen?</p>
<p>Mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220551</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220551</guid><dc:creator><![CDATA[Mo89]]></dc:creator><pubDate>Wed, 31 Jan 2007 14:51:18 GMT</pubDate></item><item><title><![CDATA[Reply to Senden einer Datei on Wed, 31 Jan 2007 15:18:33 GMT]]></title><description><![CDATA[<p>Da Du eine Datei versendest weist Du doch wie groß die Datei ist, bzw. kanst es mit GetFileSize erfragen.<br />
Was meinst Du eigentlichmit versenden? Email, TCP/IP, COM, SendMessage...?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220578</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 31 Jan 2007 15:18:33 GMT</pubDate></item><item><title><![CDATA[Reply to Senden einer Datei on Wed, 31 Jan 2007 15:26:45 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>per Winsock also TCP/IP,</p>
<p>leider kann ich aber nicht mehr als 1 000 000 chars reservieren.</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220582</guid><dc:creator><![CDATA[Mo89]]></dc:creator><pubDate>Wed, 31 Jan 2007 15:26:45 GMT</pubDate></item><item><title><![CDATA[Reply to Senden einer Datei on Wed, 31 Jan 2007 15:41:28 GMT]]></title><description><![CDATA[<p>Hier mal mein Source:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;windows.h&gt;

int download(void)

{

unsigned int i=0;

char buffer[1000000];

FILE *datei;
datei=fopen(&quot;C:\\test.wav&quot;,&quot;r+b&quot;);
FILE *dest;
dest=fopen(&quot;C:\\ergebnis.wav&quot;,&quot;w+b&quot;);

 if(datei)
    {
        char c;

       while(!feof(datei))
 { 
	c = fgetc(datei);
	buffer[i]=c;
	fprintf(dest,&quot;%c&quot;,buffer[i]);
	i=i+1;
fread(
 }

       fclose(datei);
	fclose(dest);
}

        return 1;

}

int WinMain( HINSTANCE hInstance,
                     HINSTANCE hInstance_2,
                     LPSTR CmdLine, int Show ) 

{

download();

return 0;

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1220606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220606</guid><dc:creator><![CDATA[Mo89]]></dc:creator><pubDate>Wed, 31 Jan 2007 15:41:28 GMT</pubDate></item><item><title><![CDATA[Reply to Senden einer Datei on Wed, 31 Jan 2007 15:47:15 GMT]]></title><description><![CDATA[<p>das ist nur mal ein Testscript, nachher wird es für einen richtigen download umgeschrieben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220613</guid><dc:creator><![CDATA[Mo89]]></dc:creator><pubDate>Wed, 31 Jan 2007 15:47:15 GMT</pubDate></item><item><title><![CDATA[Reply to Senden einer Datei on Wed, 31 Jan 2007 16:13:53 GMT]]></title><description><![CDATA[<p>Hmm?! Wo empfängst du denn da die Daten?</p>
<p>Also ne unsaubere Möglichkeit ist es, einfach den Buffer zu vergrößern.</p>
<p>Die saubere Methode ist es halt dein Protokol um Nachrichten zu erweitern.<br />
Dann machst du es so:<br />
1. Dateiname schicken<br />
2. Dateigröße schicken (1 und 2 kann man in einer Nachricht machen)<br />
3. Datei in Pakete aufteilen und abschicken<br />
4. Beim Client halt darauf warten das die volle größe erreicht ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220638</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Wed, 31 Jan 2007 16:13:53 GMT</pubDate></item><item><title><![CDATA[Reply to Senden einer Datei on Wed, 31 Jan 2007 16:47:13 GMT]]></title><description><![CDATA[<p>Danke!</p>
<p>Puh das höhrt sich etwas kompliziert an, hmm ich probiers mal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220646</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220646</guid><dc:creator><![CDATA[Mo89]]></dc:creator><pubDate>Wed, 31 Jan 2007 16:47:13 GMT</pubDate></item><item><title><![CDATA[Reply to Senden einer Datei on Wed, 31 Jan 2007 18:32:11 GMT]]></title><description><![CDATA[<p>Ich würde es in keinem Fall in einem Schub versenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220704</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220704</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 31 Jan 2007 18:32:11 GMT</pubDate></item><item><title><![CDATA[Reply to Senden einer Datei on Wed, 31 Jan 2007 19:01:00 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<p>3. Datei in Pakete aufteilen und abschicken</p>
</blockquote>
<p>das ist überflüssig.<br />
tcp ist ein streaming protokoll, das packt sich selber pakete...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220718</guid><dc:creator><![CDATA[ten]]></dc:creator><pubDate>Wed, 31 Jan 2007 19:01:00 GMT</pubDate></item><item><title><![CDATA[Reply to Senden einer Datei on Wed, 31 Jan 2007 19:08:48 GMT]]></title><description><![CDATA[<p>Aber es macht absolut keinen Sinn 1mb in einem Block zu senden ohne Kontrolle oder Feedback Möglichkeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220723</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 31 Jan 2007 19:08:48 GMT</pubDate></item><item><title><![CDATA[Reply to Senden einer Datei on Wed, 31 Jan 2007 19:23:56 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>Aber es macht absolut keinen Sinn 1mb in einem Block zu senden ohne Kontrolle oder Feedback Möglichkeiten.</p>
</blockquote>
<p>kann man ja asynchron machen, in einem separaten thread, oder mit dem winapi overlapped-gedöns.<br />
abbrechen kann man's dann immer.<br />
und ende ist, wenn das letzte byte des files in den socket geschoben würde.<br />
um die anzahl der datei-lese und socket-send aufrufe zu minimieren, sollte man schon einen buffer nehmen, das hat aber nix mit pakete packen zu tun <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 />
oder 'TransmitFile' nehmen...<br />
guckt ihr: <a href="http://msdn.microsoft.com/msdnmag/issues/1000/winsock/" rel="nofollow">http://msdn.microsoft.com/msdnmag/issues/1000/winsock/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220738</guid><dc:creator><![CDATA[ten]]></dc:creator><pubDate>Wed, 31 Jan 2007 19:23:56 GMT</pubDate></item><item><title><![CDATA[Reply to Senden einer Datei on Wed, 31 Jan 2007 20:19:16 GMT]]></title><description><![CDATA[<p>so hab das mal so umgesetzt(noch ohne Übertragungskontrolle)</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;windows.h&gt;

int download(SOCKET socket, SOCKADDR_IN adrress, char parameter_1[]);

{

int i=0;
char buffer[10000];

unsigned long int FileSize;
int Status=0;

FILE *datei;
datei=fopen(&quot;C:\\test.wav&quot;,&quot;r+b&quot;);
FILE *dest;
dest=fopen(&quot;C:\\ergebnis.wav&quot;,&quot;w+b&quot;);

fseek(datei, 0, SEEK_END);
FileSize = ftell(datei);
fseek(datei, 0, SEEK_SET);

 if(datei)
    {
        char c;

 do   
 { 
fread(buffer,4096,1,datei);
send(socket,buffer,4096,0);

Status=Status+4096;

 }while(!feof(datei)&amp;&amp;(Status&lt;FileSize));

       fclose(datei);
	fclose(dest);
}

        return 1;

}

int WinMain( HINSTANCE hInstance,
                     HINSTANCE hInstance_2,
                     LPSTR CmdLine, int Show ) 

{

download();

return 0;

}
</code></pre>
<p>Die Frage ist nur, das mit dem Status(die var) bekomm man eh ned besser hin oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220771</guid><dc:creator><![CDATA[Mo89]]></dc:creator><pubDate>Wed, 31 Jan 2007 20:19:16 GMT</pubDate></item><item><title><![CDATA[Reply to Senden einer Datei on Thu, 01 Feb 2007 15:34:42 GMT]]></title><description><![CDATA[<p>Üblicherweise sieht das inetwa so aus:</p>
<pre><code class="language-cpp">size_t const length = 123456;

    char buffer[1024*16];

    size_t toSend = length;
    while(toSend)
    {
        size_t chunk = toSend &gt; sizeof(buffer) ? sizeof(buffer) : toSend;

        fread(buffer,chunk,1,fileHandle);
        send_block(socket, buffer, chunk);

        toSend -= chunk;
    }
</code></pre>
<p>Ich habe extra &quot;send_block&quot; statt send geschrieben, da send nicht garantiert alles zu übertragen - send kann ohne weiteres bloss ein paar Bytes übertragen und dann zurückkommen. Eine Funktion &quot;send_block&quot; (oder wie auch immer du sie dann nennst) die solange send aufruft bis alles übertragen ist musst du dir selbst schreiben.<br />
Gleiches gilt im übrigen für recv.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1221224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1221224</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 01 Feb 2007 15:34:42 GMT</pubDate></item></channel></rss>