<?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] Wie lese ich alles was der Server sendet aus,via recv &#x2F; Probleme mit meinem Code]]></title><description><![CDATA[<p>Hallo <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="🙂"
    /><br />
Also ich schreibe gerade ein paar Netzwerk Funktionen,eine davon sollte die<br />
gesammte Antwort des Servers (z.B. bei einem HTTP-GET den Source einer Seite)<br />
in einen String schreiben und ihn dann zurückgeben,der Code:</p>
<pre><code class="language-cpp">string receive_message(void)    
{
string received;
char buf[MAX_SIZE];

do{
   rc = recv(s,buf,MAX_SIZE,0);
    if(rc==0)
    {
     error_b = 1 ;
     error += &quot;Disconnected!\n&quot;;
    }
    if(rc==SOCKET_ERROR)
    {
     error_b = 1 ;
     error += &quot;Recv failed!\n&quot;;
    }
    received += buf;

 cout &lt;&lt; rc &lt;&lt; endl;    
}while(error_b == 1 || rc &gt;= MAX_SIZE);    

return received;    
}
</code></pre>
<p>Dort lass ich mir rc ausgeben,er gibt einmal 1204 und dann 236 aus,wobei<br />
die Schleife abbricht da MAX_SIZE 1024 ist!<br />
Lass ich mir dann received ausgeben ist das aber bei weitem nicht der gesammte<br />
Code der Seite...Warum empfange ich beim 2. Mal nur noch 236 Bytes?Normalerweise<br />
sollte ich doch solange 1024 empfangen bis ich fast alles ausgelesen hab,dann<br />
sollte ich weniger also 1024 auslesen,eben weil nichts mehr da ist,und dann erst<br />
abbrechen...<br />
Aber dem ist leider nicht so!<br />
Was mich noch stutzig mach ist das</p>
<pre><code class="language-cpp">cout &lt;&lt; get.length();
</code></pre>
<p>2050 ausgibt o.O <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Wär echt schön wenn mir jemand sagen kann was es damit auf sich hat und wie ich<br />
alles auslesen kann <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>Danke im voraus</p>
<p>Hier nochmal der gesammte Code:</p>
<pre><code class="language-cpp">#define _WIN32_WINNT 0x0500
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;windows.h&gt;
#include &lt;winsock2.h&gt;
#define MAX_SIZE 1024
using namespace std;

int startWinsock(void);
long getAddrFromString(char* ,SOCKADDR_IN* );

         void send_message(char* );
         string receive_message(void);
         void start(char*,int);
         string error;
         int error_b;
         long rc;
         SOCKET s;
         SOCKADDR_IN addr;
         char buf[256];
         string get;

int main(void)
{

cout &lt;&lt; &quot;Starting Winsock...&quot;;
startWinsock();
cout &lt;&lt; &quot;Done\n\n&quot;;

cout &lt;&lt; &quot;Connecting...&quot;;
start(&quot;google.de&quot;,80);
cout &lt;&lt; &quot;Done\n\n&quot;;

cout &lt;&lt; &quot;Sending...&quot;;
send_message(&quot;GET / HTTP/1.1\nHost: www.google.de\n\n&quot;);  /* &lt;== */
cout &lt;&lt; &quot;Done\n\n&quot;;

cout &lt;&lt; &quot;Receiving...\n\n&quot;;
get = receive_message();  /* &lt;== */
cout &lt;&lt; &quot;\n\nDone\n\n&quot;;

cout &lt;&lt; get.length();
cout &lt;&lt; get;    
system(&quot;PAUSE&quot;);  
return 0;    
}

/* ************************************************* */

void start(char* hostnameOrIp,int port)
{
s=socket(AF_INET,SOCK_STREAM,0);
  if(s==INVALID_SOCKET)
  {
    error_b = 1 ;
    error += &quot;Could not create Socket!\n&quot;;
    return ;
  }

  memset(&amp;addr,0,sizeof(SOCKADDR_IN)); 
  addr.sin_family=AF_INET;
  addr.sin_port=htons(port); 
  rc=getAddrFromString(hostnameOrIp,&amp;addr);
  rc=connect(s,(SOCKADDR*)&amp;addr,sizeof(SOCKADDR));
  if(rc==SOCKET_ERROR)
  {
    error_b = 1 ;
    error += &quot;Could not connect to server!\n&quot;;
  }
}

/* ************************************************* */

void send_message(char* message)
{
rc = send(s,message,strlen(message),0);
  if(rc==SOCKET_ERROR)
  {
    error_b = 1 ;
    error += &quot;Could not send message!\n&quot;;
  }
}

/* ************************************************* */

string receive_message(void)    
{
string received;
char buf[MAX_SIZE];

do{
   rc = recv(s,buf,MAX_SIZE,0);
    if(rc==0)
    {
     error_b = 1 ;
     error += &quot;Disconnected!\n&quot;;
    }
    if(rc==SOCKET_ERROR)
    {
     error_b = 1 ;
     error += &quot;Recv failed!\n&quot;;
    }
    received += buf;

 cout &lt;&lt; rc &lt;&lt; endl;    
}while(error_b == 1 || rc &gt;= MAX_SIZE);    

return received;    
}

/* ************************************************* */
/* ************************************************* */

int startWinsock(void)
{
  WSADATA wsa;
  return WSAStartup(MAKEWORD(2,0),&amp;wsa);
}

/* ************************************************* */

long getAddrFromString(char* hostnameOrIp, SOCKADDR_IN* addr)
{
  long rc;
  unsigned long ip;
  HOSTENT* he;

  if(hostnameOrIp==NULL || addr==NULL)
    return SOCKET_ERROR;

  ip=inet_addr(hostnameOrIp);

  if(ip!=INADDR_NONE)
  {
    addr-&gt;sin_addr.s_addr=ip;
    return 0;
  }
  else
  {
    he=gethostbyname(hostnameOrIp);
    if(he==NULL)
    {
      return SOCKET_ERROR;
    }
    else
    {
      memcpy(&amp;(addr-&gt;sin_addr),he-&gt;h_addr_list[0],4);
    }
    return 0;

  }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/149301/problem-wie-lese-ich-alles-was-der-server-sendet-aus-via-recv-probleme-mit-meinem-code</link><generator>RSS for Node</generator><lastBuildDate>Sun, 19 Jul 2026 02:55:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/149301.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 04 Jun 2006 17:28:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [Problem] Wie lese ich alles was der Server sendet aus,via recv &#x2F; Probleme mit meinem Code on Sun, 04 Jun 2006 17:28:11 GMT]]></title><description><![CDATA[<p>Hallo <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="🙂"
    /><br />
Also ich schreibe gerade ein paar Netzwerk Funktionen,eine davon sollte die<br />
gesammte Antwort des Servers (z.B. bei einem HTTP-GET den Source einer Seite)<br />
in einen String schreiben und ihn dann zurückgeben,der Code:</p>
<pre><code class="language-cpp">string receive_message(void)    
{
string received;
char buf[MAX_SIZE];

do{
   rc = recv(s,buf,MAX_SIZE,0);
    if(rc==0)
    {
     error_b = 1 ;
     error += &quot;Disconnected!\n&quot;;
    }
    if(rc==SOCKET_ERROR)
    {
     error_b = 1 ;
     error += &quot;Recv failed!\n&quot;;
    }
    received += buf;

 cout &lt;&lt; rc &lt;&lt; endl;    
}while(error_b == 1 || rc &gt;= MAX_SIZE);    

return received;    
}
</code></pre>
<p>Dort lass ich mir rc ausgeben,er gibt einmal 1204 und dann 236 aus,wobei<br />
die Schleife abbricht da MAX_SIZE 1024 ist!<br />
Lass ich mir dann received ausgeben ist das aber bei weitem nicht der gesammte<br />
Code der Seite...Warum empfange ich beim 2. Mal nur noch 236 Bytes?Normalerweise<br />
sollte ich doch solange 1024 empfangen bis ich fast alles ausgelesen hab,dann<br />
sollte ich weniger also 1024 auslesen,eben weil nichts mehr da ist,und dann erst<br />
abbrechen...<br />
Aber dem ist leider nicht so!<br />
Was mich noch stutzig mach ist das</p>
<pre><code class="language-cpp">cout &lt;&lt; get.length();
</code></pre>
<p>2050 ausgibt o.O <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Wär echt schön wenn mir jemand sagen kann was es damit auf sich hat und wie ich<br />
alles auslesen kann <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>Danke im voraus</p>
<p>Hier nochmal der gesammte Code:</p>
<pre><code class="language-cpp">#define _WIN32_WINNT 0x0500
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;windows.h&gt;
#include &lt;winsock2.h&gt;
#define MAX_SIZE 1024
using namespace std;

int startWinsock(void);
long getAddrFromString(char* ,SOCKADDR_IN* );

         void send_message(char* );
         string receive_message(void);
         void start(char*,int);
         string error;
         int error_b;
         long rc;
         SOCKET s;
         SOCKADDR_IN addr;
         char buf[256];
         string get;

int main(void)
{

cout &lt;&lt; &quot;Starting Winsock...&quot;;
startWinsock();
cout &lt;&lt; &quot;Done\n\n&quot;;

cout &lt;&lt; &quot;Connecting...&quot;;
start(&quot;google.de&quot;,80);
cout &lt;&lt; &quot;Done\n\n&quot;;

cout &lt;&lt; &quot;Sending...&quot;;
send_message(&quot;GET / HTTP/1.1\nHost: www.google.de\n\n&quot;);  /* &lt;== */
cout &lt;&lt; &quot;Done\n\n&quot;;

cout &lt;&lt; &quot;Receiving...\n\n&quot;;
get = receive_message();  /* &lt;== */
cout &lt;&lt; &quot;\n\nDone\n\n&quot;;

cout &lt;&lt; get.length();
cout &lt;&lt; get;    
system(&quot;PAUSE&quot;);  
return 0;    
}

/* ************************************************* */

void start(char* hostnameOrIp,int port)
{
s=socket(AF_INET,SOCK_STREAM,0);
  if(s==INVALID_SOCKET)
  {
    error_b = 1 ;
    error += &quot;Could not create Socket!\n&quot;;
    return ;
  }

  memset(&amp;addr,0,sizeof(SOCKADDR_IN)); 
  addr.sin_family=AF_INET;
  addr.sin_port=htons(port); 
  rc=getAddrFromString(hostnameOrIp,&amp;addr);
  rc=connect(s,(SOCKADDR*)&amp;addr,sizeof(SOCKADDR));
  if(rc==SOCKET_ERROR)
  {
    error_b = 1 ;
    error += &quot;Could not connect to server!\n&quot;;
  }
}

/* ************************************************* */

void send_message(char* message)
{
rc = send(s,message,strlen(message),0);
  if(rc==SOCKET_ERROR)
  {
    error_b = 1 ;
    error += &quot;Could not send message!\n&quot;;
  }
}

/* ************************************************* */

string receive_message(void)    
{
string received;
char buf[MAX_SIZE];

do{
   rc = recv(s,buf,MAX_SIZE,0);
    if(rc==0)
    {
     error_b = 1 ;
     error += &quot;Disconnected!\n&quot;;
    }
    if(rc==SOCKET_ERROR)
    {
     error_b = 1 ;
     error += &quot;Recv failed!\n&quot;;
    }
    received += buf;

 cout &lt;&lt; rc &lt;&lt; endl;    
}while(error_b == 1 || rc &gt;= MAX_SIZE);    

return received;    
}

/* ************************************************* */
/* ************************************************* */

int startWinsock(void)
{
  WSADATA wsa;
  return WSAStartup(MAKEWORD(2,0),&amp;wsa);
}

/* ************************************************* */

long getAddrFromString(char* hostnameOrIp, SOCKADDR_IN* addr)
{
  long rc;
  unsigned long ip;
  HOSTENT* he;

  if(hostnameOrIp==NULL || addr==NULL)
    return SOCKET_ERROR;

  ip=inet_addr(hostnameOrIp);

  if(ip!=INADDR_NONE)
  {
    addr-&gt;sin_addr.s_addr=ip;
    return 0;
  }
  else
  {
    he=gethostbyname(hostnameOrIp);
    if(he==NULL)
    {
      return SOCKET_ERROR;
    }
    else
    {
      memcpy(&amp;(addr-&gt;sin_addr),he-&gt;h_addr_list[0],4);
    }
    return 0;

  }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1071278</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1071278</guid><dc:creator><![CDATA[Socket__]]></dc:creator><pubDate>Sun, 04 Jun 2006 17:28:11 GMT</pubDate></item><item><title><![CDATA[Reply to [Problem] Wie lese ich alles was der Server sendet aus,via recv &#x2F; Probleme mit meinem Code on Sun, 04 Jun 2006 18:13:07 GMT]]></title><description><![CDATA[<p>Die Bedingung</p>
<pre><code class="language-cpp">}while(error_b == 1 || rc &gt;= MAX_SIZE);
</code></pre>
<p>sieht falsch aus. Brich die Schleife ab, wenn recv 0 oder SOCKET_ERROR liefert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1071312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1071312</guid><dc:creator><![CDATA[----]]></dc:creator><pubDate>Sun, 04 Jun 2006 18:13:07 GMT</pubDate></item><item><title><![CDATA[Reply to [Problem] Wie lese ich alles was der Server sendet aus,via recv &#x2F; Probleme mit meinem Code on Sun, 04 Jun 2006 19:40:35 GMT]]></title><description><![CDATA[<p>Danke scheint alles zu klappen <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/1071341</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1071341</guid><dc:creator><![CDATA[Socket__]]></dc:creator><pubDate>Sun, 04 Jun 2006 19:40:35 GMT</pubDate></item><item><title><![CDATA[Reply to [Problem] Wie lese ich alles was der Server sendet aus,via recv &#x2F; Probleme mit meinem Code on Sun, 04 Jun 2006 19:58:01 GMT]]></title><description><![CDATA[<p>Schnellschuss <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="😃"
    /><br />
Tut mir leid wegen dem Doppelpost aber gerade merke ich das er immer noch nicht alles bekommt/ausliest.<br />
Bei der einen Seite ist get.length() 6150,bei der anderen 19475,aber den gesammten Inhalt bekomm ich nie <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="😞"
    /><br />
Die Funktion:</p>
<pre><code class="language-cpp">string NetSocket::receive_message(void)    
string received;
char buf[MAX_SIZE];
int lol;
do{
   rc = recv(s,buf,MAX_SIZE,0);
   lol += rc;
    if(rc==SOCKET_ERROR)
    {
     error_b = 1 ;
     error += &quot;Recv failed!\n&quot;;
    }

     received += buf;

}while(rc != 0 &amp;&amp; rc != SOCKET_ERROR );    

return received;    
}
</code></pre>
<p>Schon mal vielen Dank <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/1071348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1071348</guid><dc:creator><![CDATA[Socket__]]></dc:creator><pubDate>Sun, 04 Jun 2006 19:58:01 GMT</pubDate></item><item><title><![CDATA[Reply to [Problem] Wie lese ich alles was der Server sendet aus,via recv &#x2F; Probleme mit meinem Code on Sun, 04 Jun 2006 20:05:44 GMT]]></title><description><![CDATA[<p>Las dir das öfter zu senden und recv sollange bis das klappt, das könnte unter umständen deinen Fehler beheben.<br />
Weiterhin wenn du den buffer ausgibst steht da Müll drinne, wenn ja setze im buffer an der position rc '\0'</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1071356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1071356</guid><dc:creator><![CDATA[Cefour]]></dc:creator><pubDate>Sun, 04 Jun 2006 20:05:44 GMT</pubDate></item><item><title><![CDATA[Reply to [Problem] Wie lese ich alles was der Server sendet aus,via recv &#x2F; Probleme mit meinem Code on Sun, 04 Jun 2006 20:06:41 GMT]]></title><description><![CDATA[<p>du musst die append memberfunktion von string nehmen oder den buffer null terminieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1071357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1071357</guid><dc:creator><![CDATA[zb]]></dc:creator><pubDate>Sun, 04 Jun 2006 20:06:41 GMT</pubDate></item><item><title><![CDATA[Reply to [Problem] Wie lese ich alles was der Server sendet aus,via recv &#x2F; Probleme mit meinem Code on Sun, 04 Jun 2006 20:20:18 GMT]]></title><description><![CDATA[<p>Meinte ich doch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1071359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1071359</guid><dc:creator><![CDATA[Cefour]]></dc:creator><pubDate>Sun, 04 Jun 2006 20:20:18 GMT</pubDate></item><item><title><![CDATA[Reply to [Problem] Wie lese ich alles was der Server sendet aus,via recv &#x2F; Probleme mit meinem Code on Sun, 04 Jun 2006 21:38:59 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=10455" rel="nofollow">evilissimo</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/1071389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1071389</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Sun, 04 Jun 2006 21:38:59 GMT</pubDate></item><item><title><![CDATA[Reply to [Problem] Wie lese ich alles was der Server sendet aus,via recv &#x2F; Probleme mit meinem Code on Sun, 04 Jun 2006 22:35:16 GMT]]></title><description><![CDATA[<p>Danke,jetzt klappt alles <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>*hofftdasesdiesmalwirklichklappt*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1071407</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1071407</guid><dc:creator><![CDATA[Socket__]]></dc:creator><pubDate>Sun, 04 Jun 2006 22:35:16 GMT</pubDate></item></channel></rss>