<?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[Dateien über Winsock versenden]]></title><description><![CDATA[<p>Hallo,</p>
<p>Es ist das 1. Mal, dass ich mich hier im Forum melde, da ich sonst immer über die Suchfunktion eine Lösung finden konnte. Nur dieses Mal leider nicht.</p>
<p>Wie die Topic schon sagt, versuche ich über die Winsock Dateien zu versenden. Ich hab sogar ein tolles Beispiel gefunden im Internet, leider hat das Ding einen Haken, man kann nur Binär-Dateien versenden.</p>
<p>So, ich hab dann hier meinen C-Beispel-Code mal gepostet und hoffe, dass mir jmd. einen Tipp geben kann, an welcher Stelle ich was ändern kann, damit ich z.B. Text-Dateien versendet werden können.</p>
<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;192.168.0.1&quot;, 80);
    //GetFileFromNet(80);
}
</code></pre>
<p>P.S. Ich benutze kein C++ und besitze nur die Kostenlose C-IDE &quot;Pelles C&quot;.</p>
<p>mfg Chris</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/153246/dateien-über-winsock-versenden</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Jul 2026 23:46:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/153246.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 14 Jul 2006 12:39:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dateien über Winsock versenden on Fri, 14 Jul 2006 12:39:13 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Es ist das 1. Mal, dass ich mich hier im Forum melde, da ich sonst immer über die Suchfunktion eine Lösung finden konnte. Nur dieses Mal leider nicht.</p>
<p>Wie die Topic schon sagt, versuche ich über die Winsock Dateien zu versenden. Ich hab sogar ein tolles Beispiel gefunden im Internet, leider hat das Ding einen Haken, man kann nur Binär-Dateien versenden.</p>
<p>So, ich hab dann hier meinen C-Beispel-Code mal gepostet und hoffe, dass mir jmd. einen Tipp geben kann, an welcher Stelle ich was ändern kann, damit ich z.B. Text-Dateien versendet werden können.</p>
<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;192.168.0.1&quot;, 80);
    //GetFileFromNet(80);
}
</code></pre>
<p>P.S. Ich benutze kein C++ und besitze nur die Kostenlose C-IDE &quot;Pelles C&quot;.</p>
<p>mfg Chris</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1097682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1097682</guid><dc:creator><![CDATA[-=Chris=-]]></dc:creator><pubDate>Fri, 14 Jul 2006 12:39:13 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien über Winsock versenden on Fri, 14 Jul 2006 14:38:23 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile.php?mode=viewprofile&amp;u=403" rel="nofollow">HumeSikkins</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=15" rel="nofollow">C++</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=4" rel="nofollow">WinAPI</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic.php?t=39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1097770</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1097770</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Fri, 14 Jul 2006 14:38:23 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien über Winsock versenden on Sat, 15 Jul 2006 09:08:54 GMT]]></title><description><![CDATA[<p>Man sieht sofort dass diese Funktionen datei binärisch behandelt.</p>
<pre><code class="language-cpp">pFile = fopen(pFileName, &quot;rb&quot;);

fseek(pFile, 0, SEEK_END);
    FileSize = ftell(pFile);
    fseek(pFile, 0, SEEK_SET);
</code></pre>
<p>theoretisch muss es aber auch text-dateien übertragen können, weil sie ja auch binärisch aufgebaut <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1098082</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1098082</guid><dc:creator><![CDATA[lightning.net]]></dc:creator><pubDate>Sat, 15 Jul 2006 09:08:54 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien über Winsock versenden on Sat, 15 Jul 2006 10:04:41 GMT]]></title><description><![CDATA[<p>Ich danke erst einmal, dass jemand geantwortet hat auf diesen Beitrag.</p>
<p>Aber ich habe natürlich noch an diesem Code weitere Tests gemacht und festgestellt, dass es glaub ich sinnlos ist mit diesem Code weiterzuarbeiten, da ich merkwürdigerweise nur Bilddateien und Anwendungen versenden kann. Z.B. Archive &amp; Textdateien kommen nicht an. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1098102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1098102</guid><dc:creator><![CDATA[-=Chris=-]]></dc:creator><pubDate>Sat, 15 Jul 2006 10:04:41 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien über Winsock versenden on Sun, 16 Jul 2006 11:53:13 GMT]]></title><description><![CDATA[<p>Ich wollte mich bloß nochmal melden, da ich einen einfacheren Weg gefunden habe Dateien über die Winsock zu übertragen:</p>
<p>(Datei von Server zu Client)</p>
<p>Server:</p>
<pre><code class="language-cpp">#include &lt;Mswsock.h&gt;

HANDLE hFile;

...

hFile = CreateFile(&quot;Datei.exe&quot;,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_SYSTEM,NULL); 

TransmitFile(Socket, hFile, 0, 0, NULL, NULL, TF_DISCONNECT);

CloseHandle(hFile);

...
</code></pre>
<p>Client:</p>
<pre><code class="language-cpp">#include &lt;winsock2.h&gt;

int rc;
FILE *f;

...

f = fopen(&quot;Datei.exe&quot;, &quot;wb&quot;);
do
{
rc = recv(s, buffer, sizeof(1026), 0);
buffer[rc] = '\0';
fwrite(buffer, rc, 1, f);
}
while(rc!=0);
fclose(f);

...
</code></pre>
<p>Ich hoffe ich hab das jetzt einigermaßen komplett geschrieben.</p>
<p>Nachteil: Nach der Übertragung wird die Verbindung getrennt, aber wenn<br />
das Flag &quot;TF_DISCONNECT&quot; weggelassen wird, dann bleibt der Server hängen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1098521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1098521</guid><dc:creator><![CDATA[-=Chris=-]]></dc:creator><pubDate>Sun, 16 Jul 2006 11:53:13 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien über Winsock versenden on Sun, 16 Jul 2006 17:34:24 GMT]]></title><description><![CDATA[<p>Mein Tipp: besorg dir einen Hexeditor und schau dir die Datei an die gesendet wurde und die Datei die empfangen wurde - vergleiche sie und stelle fest wo das Problem liegt: z. B. es kommt kein einziges Byte der Datei an, die Dateigröße stimmt aber nur die ersten 4096 Bytes sind ungleich 0 - der Rest ist 0, usw. - so kann man am einfachsten den Fehler finden - BTW: du solltest alle Dateien sind binär verschicken, egal ob Text oder nicht - das macht keinen Unterschied</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1098700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1098700</guid><dc:creator><![CDATA[Vertexwahn]]></dc:creator><pubDate>Sun, 16 Jul 2006 17:34:24 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien über Winsock versenden on Mon, 17 Jul 2006 07:24:37 GMT]]></title><description><![CDATA[<p>hallo,</p>
<p>eine frage zu TransmitFile(...)<br />
kann man auch in ner schleife die ganze zeit abfragen wie viele<br />
bytes schon versendet wurden? um den fortschritt in %<br />
anzuzeigen z.B.</p>
<p>oder müsste man dazu eine extra verbindung zum Client aufbauen damit<br />
der Client diese Informationen sendet?</p>
<p>danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1098932</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1098932</guid><dc:creator><![CDATA[Babelduos Geist]]></dc:creator><pubDate>Mon, 17 Jul 2006 07:24:37 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien über Winsock versenden on Mon, 17 Jul 2006 07:30:20 GMT]]></title><description><![CDATA[<p>In einer Server-Anwendung braucht man doch keine Fortschrittsanzeige. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1098934</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1098934</guid><dc:creator><![CDATA[,,,]]></dc:creator><pubDate>Mon, 17 Jul 2006 07:30:20 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien über Winsock versenden on Mon, 17 Jul 2006 08:38:46 GMT]]></title><description><![CDATA[<p>aber was ist wenn man was zum server sendet und im Client<br />
eine Forschrittsanzeige möchte?</p>
<p><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>
]]></description><link>https://www.c-plusplus.net/forum/post/1098978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1098978</guid><dc:creator><![CDATA[Babelduos Geist]]></dc:creator><pubDate>Mon, 17 Jul 2006 08:38:46 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien über Winsock versenden on Mon, 17 Jul 2006 08:45:46 GMT]]></title><description><![CDATA[<p>dann muss man den tranfer selbst coden. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1098979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1098979</guid><dc:creator><![CDATA[,,,]]></dc:creator><pubDate>Mon, 17 Jul 2006 08:45:46 GMT</pubDate></item><item><title><![CDATA[Reply to Dateien über Winsock versenden on Mon, 17 Jul 2006 09:25:48 GMT]]></title><description><![CDATA[<p>genau das musste ich nämlich machen^^<br />
dachte schon hier gäb es einen einfacheren weg *puh*</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1099005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1099005</guid><dc:creator><![CDATA[Babelduos Geist]]></dc:creator><pubDate>Mon, 17 Jul 2006 09:25:48 GMT</pubDate></item></channel></rss>