<?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[Problem mit send&#x2F;recv]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab ein etwas seltsames Problem mit send bzw recv.<br />
Erstmal ein absoultes Minimalbeispiel, um dieses zu verdeutlichen:</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;winsock2.h&gt;
#include &lt;cstring&gt;
using namespace std;

int main(int argc, char *argv[])
{
    WSADATA wsaData;
    WSAStartup(MAKEWORD(2,2), &amp;wsaData) != 0;   

    SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

    SOCKADDR_IN saddr_in;
    saddr_in.sin_family = AF_INET;
    saddr_in.sin_addr.s_addr = inet_addr(&quot;80.190.241.136&quot;);
    saddr_in.sin_port = htons(80);

    connect(sock, (SOCKADDR*)&amp;saddr_in, sizeof(saddr_in));

    char buffer[] = &quot;GET Cpp/index.html HTTP/1.1\r\nHost: www.volkard.de\r\nAccept: */*\r\nConnection: close\r\n\r\n&quot;;
    send(sock, buffer, strlen(buffer), 0);
    //string buffer = &quot;GET Cpp/index.html HTTP/1.1\r\nHost: www.volkard.de\r\nAccept: */*\r\nConnection: close\r\n\r\n&quot;;
    //send(sock, buffer.c_str(), buffer.size(), 0);

    int len = 256;
    char recvbuf[256];
    int bytesReceived;
    while((bytesReceived = recv(sock, recvbuf, len, 0)) != 0)
    {
        cout &lt;&lt; recvbuf;
        memset(recvbuf, 0, len);
    }
    closesocket(sock);

    WSACleanup();
    return 0;
}
</code></pre>
<p>Wenn das Programm so ausgeführt wird, wie es oben steht, funktioniert alles wie gewünscht.<br />
Wenn ich nun meinen buffer durch eine Variable vom typ std::string ersetze (siehe auskommentierte Zeilen), was ich im eigentlich Programm auch aus Komfort-Gründen getan habe, funktioniert das Senden auch noch. Aber beim Empfangen der Daten steht auf einmal an einigen (wenigen) Stellen &quot;Müll&quot; im Puffer (der immer noch ein char-Array ist). Beispielsweise stehen in der Zeile nach dem Header, der ja eigentlich eine Leerzeile sein sollte, plötzlich 4-5 wirre Buchstaben (&quot;€ßH]&quot; oder Ähnliches). Ich bekomme aber definitiv keinen Bad Request oder sowas zurück, sondern es ist die richtige Datei mit eben diesen Fehlern.<br />
Weiss jemand, woran das liegen könnte, ist das ein Bug (benutze Dev-C++ mit Mingw/gcc 3.4.2)?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/118218/problem-mit-send-recv</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Jul 2026 18:29:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/118218.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 16 Aug 2005 11:14:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit send&#x2F;recv on Tue, 16 Aug 2005 11:28:32 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab ein etwas seltsames Problem mit send bzw recv.<br />
Erstmal ein absoultes Minimalbeispiel, um dieses zu verdeutlichen:</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;winsock2.h&gt;
#include &lt;cstring&gt;
using namespace std;

int main(int argc, char *argv[])
{
    WSADATA wsaData;
    WSAStartup(MAKEWORD(2,2), &amp;wsaData) != 0;   

    SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

    SOCKADDR_IN saddr_in;
    saddr_in.sin_family = AF_INET;
    saddr_in.sin_addr.s_addr = inet_addr(&quot;80.190.241.136&quot;);
    saddr_in.sin_port = htons(80);

    connect(sock, (SOCKADDR*)&amp;saddr_in, sizeof(saddr_in));

    char buffer[] = &quot;GET Cpp/index.html HTTP/1.1\r\nHost: www.volkard.de\r\nAccept: */*\r\nConnection: close\r\n\r\n&quot;;
    send(sock, buffer, strlen(buffer), 0);
    //string buffer = &quot;GET Cpp/index.html HTTP/1.1\r\nHost: www.volkard.de\r\nAccept: */*\r\nConnection: close\r\n\r\n&quot;;
    //send(sock, buffer.c_str(), buffer.size(), 0);

    int len = 256;
    char recvbuf[256];
    int bytesReceived;
    while((bytesReceived = recv(sock, recvbuf, len, 0)) != 0)
    {
        cout &lt;&lt; recvbuf;
        memset(recvbuf, 0, len);
    }
    closesocket(sock);

    WSACleanup();
    return 0;
}
</code></pre>
<p>Wenn das Programm so ausgeführt wird, wie es oben steht, funktioniert alles wie gewünscht.<br />
Wenn ich nun meinen buffer durch eine Variable vom typ std::string ersetze (siehe auskommentierte Zeilen), was ich im eigentlich Programm auch aus Komfort-Gründen getan habe, funktioniert das Senden auch noch. Aber beim Empfangen der Daten steht auf einmal an einigen (wenigen) Stellen &quot;Müll&quot; im Puffer (der immer noch ein char-Array ist). Beispielsweise stehen in der Zeile nach dem Header, der ja eigentlich eine Leerzeile sein sollte, plötzlich 4-5 wirre Buchstaben (&quot;€ßH]&quot; oder Ähnliches). Ich bekomme aber definitiv keinen Bad Request oder sowas zurück, sondern es ist die richtige Datei mit eben diesen Fehlern.<br />
Weiss jemand, woran das liegen könnte, ist das ein Bug (benutze Dev-C++ mit Mingw/gcc 3.4.2)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/853241</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/853241</guid><dc:creator><![CDATA[Asgard]]></dc:creator><pubDate>Tue, 16 Aug 2005 11:28:32 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit send&#x2F;recv on Tue, 16 Aug 2005 11:22:36 GMT]]></title><description><![CDATA[<p>Weil du recvbuf nicht 0 terminierst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/853254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/853254</guid><dc:creator><![CDATA[wahrscheinlich]]></dc:creator><pubDate>Tue, 16 Aug 2005 11:22:36 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit send&#x2F;recv on Tue, 16 Aug 2005 11:25:17 GMT]]></title><description><![CDATA[<p>Stimmt, das habe ich in dem Beispiel vergessen, aber daran liegt es leider nicht (habe es gerade noch mal probiert).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/853258</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/853258</guid><dc:creator><![CDATA[Asgard]]></dc:creator><pubDate>Tue, 16 Aug 2005 11:25:17 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit send&#x2F;recv on Tue, 16 Aug 2005 11:26:54 GMT]]></title><description><![CDATA[<p>Dann zeig den neuen Code... <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/853261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/853261</guid><dc:creator><![CDATA[wahrscheinlich]]></dc:creator><pubDate>Tue, 16 Aug 2005 11:26:54 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit send&#x2F;recv on Tue, 16 Aug 2005 11:31:35 GMT]]></title><description><![CDATA[<p>Ich habe es oben editiert (die while-Schleife).<br />
Aber wie gesagt, wenn ich nur char-Arrays benutze funktioniert das Programm normal. Wenn der Puffer, der zum Senden benutzt wird, allerdings vom Typ string ist, tritt das Problem beim Empfangen auf - obwohl der Empfangsteil unverändert ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/853264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/853264</guid><dc:creator><![CDATA[Asgard]]></dc:creator><pubDate>Tue, 16 Aug 2005 11:31:35 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit send&#x2F;recv on Tue, 16 Aug 2005 11:33:38 GMT]]></title><description><![CDATA[<p><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="🤡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/853268</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/853268</guid><dc:creator><![CDATA[wahrscheinlich]]></dc:creator><pubDate>Tue, 16 Aug 2005 11:33:38 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit send&#x2F;recv on Tue, 16 Aug 2005 11:35:26 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">char recvbuf[256 + 1];

int bytesReceived;

do
{
	bytesReceived = recv(sock, recvbuf, 256, 0);
	recvbuf[bytesReceived] = '\0';

	cout &lt;&lt; recvbuf;
} while(bytesReceived != 0);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/853269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/853269</guid><dc:creator><![CDATA[beispiel]]></dc:creator><pubDate>Tue, 16 Aug 2005 11:35:26 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit send&#x2F;recv on Tue, 16 Aug 2005 11:40:39 GMT]]></title><description><![CDATA[<p>Was beispiel damit sagen will: Wenn du 256 Zeichen in einen 256 Zeichen großen Puffer einliest, dann ist da kein Platz mehr für eine Nullterminierung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/853276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/853276</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 16 Aug 2005 11:40:39 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit send&#x2F;recv on Tue, 16 Aug 2005 11:44:04 GMT]]></title><description><![CDATA[<p>Du machst ja memset erst nach der ersten Ausgabe. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/853280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/853280</guid><dc:creator><![CDATA[anti-memset]]></dc:creator><pubDate>Tue, 16 Aug 2005 11:44:04 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit send&#x2F;recv on Tue, 16 Aug 2005 11:48:46 GMT]]></title><description><![CDATA[<p>Ja, danke Euch für die Hilfe!</p>
<p>Das war dumm <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/853285</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/853285</guid><dc:creator><![CDATA[Asgard]]></dc:creator><pubDate>Tue, 16 Aug 2005 11:48:46 GMT</pubDate></item></channel></rss>