<?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 einlesen und uebertragen(Binär)]]></title><description><![CDATA[<p>Hallo,<br />
ich möchte gerne eine Datei versenden und habe dies auch schon mit folgendem Code geschafft:</p>
<pre><code class="language-cpp">std::ifstream thefile(&quot;Bla.dat&quot;, std::ios::in | std::ios::binary);
//...
std::string buffer;
while (std::getline(thefile, buffer)) {
	sendStr(connectedSocket, buffer + &quot;\n&quot;);
}
thefile.close();
</code></pre>
<p>Das Problem ist, dass dieser Code zu langsam ist, da die Datei <strong>viele</strong> Zeilen enthält die <strong>nicht sehr lang</strong> sind! Ich habe also folgendes ausprobiert:</p>
<pre><code class="language-cpp">std::ifstream thefile(&quot;Bla.dat&quot;, std::ios::in | std::ios::binary);
//...
char buffer[512];
while (true) {
	thefile.read(buffer, sizeof(buffer));
	sendStr(connectedSocket, buffer);
	if (screenshot.eof()) { break; }
}
thefile.close();
</code></pre>
<p>Die Datei wird leider nicht komplett übertragen... Wo liegt der Fehler? <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="😞"
    /></p>
<p>Vielen Dank im Voraus!!! <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>
<p>HilfeNoetig</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/194467/datei-einlesen-und-uebertragen-binär</link><generator>RSS for Node</generator><lastBuildDate>Mon, 28 Sep 2026 11:32:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/194467.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 07 Oct 2007 13:16:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Datei einlesen und uebertragen(Binär) on Sun, 07 Oct 2007 13:16:50 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich möchte gerne eine Datei versenden und habe dies auch schon mit folgendem Code geschafft:</p>
<pre><code class="language-cpp">std::ifstream thefile(&quot;Bla.dat&quot;, std::ios::in | std::ios::binary);
//...
std::string buffer;
while (std::getline(thefile, buffer)) {
	sendStr(connectedSocket, buffer + &quot;\n&quot;);
}
thefile.close();
</code></pre>
<p>Das Problem ist, dass dieser Code zu langsam ist, da die Datei <strong>viele</strong> Zeilen enthält die <strong>nicht sehr lang</strong> sind! Ich habe also folgendes ausprobiert:</p>
<pre><code class="language-cpp">std::ifstream thefile(&quot;Bla.dat&quot;, std::ios::in | std::ios::binary);
//...
char buffer[512];
while (true) {
	thefile.read(buffer, sizeof(buffer));
	sendStr(connectedSocket, buffer);
	if (screenshot.eof()) { break; }
}
thefile.close();
</code></pre>
<p>Die Datei wird leider nicht komplett übertragen... Wo liegt der Fehler? <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="😞"
    /></p>
<p>Vielen Dank im Voraus!!! <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>
<p>HilfeNoetig</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1379687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1379687</guid><dc:creator><![CDATA[HilfeNoetig]]></dc:creator><pubDate>Sun, 07 Oct 2007 13:16:50 GMT</pubDate></item><item><title><![CDATA[Reply to Datei einlesen und uebertragen(Binär) on Sun, 07 Oct 2007 14:43:01 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;winsock2.h&gt;
#include &lt;windows.h&gt;
#include &lt;stdio.h&gt;
#include &lt;conio.h&gt;
#include &lt;string.h&gt;

#pragma comment( lib, &quot;ws2_32.lib&quot; )

typedef struct _NETFILEHEADER
{
    unsigned long FileSize;
    char pFileName[256];
} NETFILEHEADER;

long SendFileToNet(const char *pFileName,
                   const char *pIP,
                   unsigned short Port)
{
    FILE *pFile;
    unsigned long FileSize;
    char buffer[4096];
    NETFILEHEADER FileHeader;
    SOCKET sender;
    WSADATA wsa;
    SOCKADDR_IN addr;
    int addrlen = sizeof(SOCKADDR_IN);

    pFile = fopen(pFileName, &quot;rb&quot;);

    if(!pFile) return 0;

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

    FileHeader.FileSize = FileSize;
    memset(FileHeader.pFileName, 0, 256);
    memcpy(FileHeader.pFileName, pFileName, strlen(pFileName));

    WSAStartup(MAKEWORD(2,0),&amp;wsa);

    sender = socket(AF_INET, SOCK_STREAM, 0);

    memset(&amp;addr, 0, sizeof(SOCKADDR_IN));
    addr.sin_family = AF_INET;
    addr.sin_port = htons(Port);
    addr.sin_addr.s_addr = inet_addr(pIP);

    connect(sender, (SOCKADDR*)&amp;addr, addrlen);

    send(sender, (char*)&amp;FileHeader, sizeof(NETFILEHEADER), 0);

    while(FileSize &gt;= 4096)
    {
        fread(buffer, 4096, 1, pFile);
        send(sender, buffer, 4096, 0);

        FileSize -= 4096;
    }

    if(FileSize)
    {
        fread(buffer, FileSize, 0, pFile);
        send(sender, buffer, FileSize, 0);
    }

    closesocket(sender);

    fclose(pFile);

    WSACleanup();

    return FileSize;
}

long GetFileFromNet(unsigned short Port)
{
    SOCKET server;
    SOCKET client;
    WSADATA wsa;
    SOCKADDR_IN addr;
    char buffer[4096];
    long rval;
    FILE *pFile;
    NETFILEHEADER FileHeader;
    long FileSize;

    int addrlen = sizeof(SOCKADDR_IN);

    WSAStartup(MAKEWORD(2,0),&amp;wsa);

    server = socket(AF_INET, SOCK_STREAM, 0);

    memset(&amp;addr, 0, sizeof(SOCKADDR_IN));
    addr.sin_family = AF_INET;
    addr.sin_port = htons(Port);
    addr.sin_addr.s_addr = INADDR_ANY;
    bind(server, (SOCKADDR*)&amp;addr, sizeof(SOCKADDR_IN));

    listen(server, 10);

    client = accept(server, (SOCKADDR*)&amp;addr, &amp;addrlen);

    recv(client, (char*)&amp;FileHeader, sizeof(NETFILEHEADER), 0);

    FileSize = FileHeader.FileSize;

    pFile = fopen(FileHeader.pFileName, &quot;wb&quot;);

    while(FileSize &gt; 0)
    {
        rval = recv(client, buffer, 4096, 0);
        fwrite(buffer, rval, 1, pFile);

        FileSize -= rval;
    }

    fclose(pFile);

    closesocket(client);
    closesocket(server);

    WSACleanup();

    return FileHeader.FileSize;
}

void main(void)
{
    //SendFileToNet(&quot;net.cpp&quot;, &quot;127.0.0.1&quot;, 2007);
    GetFileFromNet(2007);
}
</code></pre>
<p>Das sind mal 2 Funktionen zum versenden und empfangen von Dateien. Um ehrlich zu sein war ich zu faul bei deinem Code auf Fehlersuche zu gehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1379751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1379751</guid><dc:creator><![CDATA[Fake oder Echt]]></dc:creator><pubDate>Sun, 07 Oct 2007 14:43:01 GMT</pubDate></item><item><title><![CDATA[Reply to Datei einlesen und uebertragen(Binär) on Sun, 07 Oct 2007 14:46:11 GMT]]></title><description><![CDATA[<p>Und dein Code hilft mir rein gar nicht weiter...</p>
<p>Wir sind hier übrigens im C++ Forum...</p>
<p>Trotzdem Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1379754</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1379754</guid><dc:creator><![CDATA[HilfeNoetig]]></dc:creator><pubDate>Sun, 07 Oct 2007 14:46:11 GMT</pubDate></item><item><title><![CDATA[Reply to Datei einlesen und uebertragen(Binär) on Sun, 07 Oct 2007 14:52:17 GMT]]></title><description><![CDATA[<p>Oh oh, jetzt wirste patzig. Einen geschenkten Gaul guckt man nicht ins Maul.<br />
Du überprüfst in deinem Mist nichteinmal wie groß die Datei ist, so dass auch zu viel bzw. zu wenig gesendet werden könnte. Aber das kann man aus meinem Beispiel ja nicht sehen, besonders nicht wenn man es sich nichteinmal anguckt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1379758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1379758</guid><dc:creator><![CDATA[Fake oder Echt]]></dc:creator><pubDate>Sun, 07 Oct 2007 14:52:17 GMT</pubDate></item><item><title><![CDATA[Reply to Datei einlesen und uebertragen(Binär) on Sun, 07 Oct 2007 15:04:01 GMT]]></title><description><![CDATA[<p>HilfeNoetig schrieb:</p>
<blockquote>
<p>Wo liegt der Fehler?</p>
</blockquote>
<p>Ich kenne deine sendStr-Funktion nicht, würde aber darauf tippen, dass deinem String der Terminator fehlt bzw. du keine Länge angibst. Da eine Binärdatei auch eingebettete Nullen enthalten kann, ist es sowieso schlecht, mit terminierten Strings zu arbeiten.</p>
<pre><code class="language-cpp">char buffer[512];
while (true) {
    if (int x = thefile.readsome(buffer, sizeof buffer))
        sendStr( connectedSocket, std::string(buffer,x));
    else
        break;
}
thefile.close();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1379762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1379762</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 07 Oct 2007 15:04:01 GMT</pubDate></item><item><title><![CDATA[Reply to Datei einlesen und uebertragen(Binär) on Sun, 07 Oct 2007 15:29:09 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>:</p>
<pre><code class="language-cpp">void sendStr(SOCKET socket, const std::string&amp; str) {
	send(socket, str.c_str(), (int)str.length(), 0);
}
</code></pre>
<p>Dein Code erzeugt bei mir leider eine leere Datei...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1379782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1379782</guid><dc:creator><![CDATA[HilfeNoetig]]></dc:creator><pubDate>Sun, 07 Oct 2007 15:29:09 GMT</pubDate></item><item><title><![CDATA[Reply to Datei einlesen und uebertragen(Binär) on Sun, 07 Oct 2007 15:34:24 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">char buffer[512];
while (thefile.good()) {
    thefile.read(buffer, sizeof buffer))
    if ( thefile.gcount() )
        sendStr( connectedSocket, std::string(buffer,thefile.gcount()));
}
</code></pre>
<p>oder so ähnlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1379789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1379789</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 07 Oct 2007 15:34:24 GMT</pubDate></item><item><title><![CDATA[Reply to Datei einlesen und uebertragen(Binär) on Sun, 07 Oct 2007 15:57:18 GMT]]></title><description><![CDATA[<p>Danke! Klappt perfekt <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>
<pre><code class="language-cpp">for (;;) {
  std::cout &lt;&lt; &quot;Vielen Dank!\n&quot;;
}
</code></pre>
<p>Viele Gruesse,<br />
HilfeNoetig</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1379806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1379806</guid><dc:creator><![CDATA[HilfeNoetig]]></dc:creator><pubDate>Sun, 07 Oct 2007 15:57:18 GMT</pubDate></item></channel></rss>