<?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[Das google logo.gif ansehen(Http etc.)]]></title><description><![CDATA[<p>Hallo wie der Titel auch schon verrät möchte ich mir gerne das Google Logo auf den Pc speichern und ansehen. Leider klappt das nicht, mein Programm lädt zwar die komplette Datei und speichert sie auch aber ich kann sie einfach nicht ansehen, denn soblad ich sie öffne sagt mir Paint, dass die Datei fehlerhaft ist!</p>
<p>Ich poste euch am besten den Code, der verrät euch wohl am meisten.</p>
<pre><code class="language-cpp">#define _WIN32_WINNT 0x500
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &quot;sockets.h&quot;
using namespace std;

int main(void)
{
string get;
startWinsock(); //muss man aufrufen um &quot;Netzwerksupport&quot; zu bekommen
NetSocket sx;   //Objekt erstellen und...
sx.client_open(&quot;google.de&quot;,80);  

sx.send_message(&quot;GET http://www.google.de/intl/de_de/images/logo.gif HTTP/1.1\nHost: google.de\nConnection: close/\n\n&quot;);  //Request senden,muss immer mit 2 \n enden 

get = sx.receive_message();  //Serverrückgabe nach &quot;get&quot;

string::size_type loc = get.find( &quot;GIF&quot;, 0 ); //Den Http-Header finden...

if( loc != string::npos )
{
    get.erase(0,loc);   //...und abschneiden
}

fstream file(&quot;C:\\outlay.gif&quot;,fstream::out | fstream::in | fstream::binary | fstream::trunc);
file.write(get.c_str(),strlen(get.c_str())); //
file.close();

cout &lt;&lt; &quot;\n\n&quot;;
system(&quot;PAUSE&quot;);
return 0;    
}
</code></pre>
<p>Jetzt noch die socket.h :</p>
<pre><code class="language-cpp">#ifdef _WIN32_WINNT
 #include &lt;windows.h&gt;
 #include &lt;winsock2.h&gt;
 #define SOCKADDR_IN SOCKADDR_IN
 #define SOCKADDR SOCKADDR
 #define HOSTENT HOSTENT
 #define FD_SET_DATA FD_SET
#else
 #include &lt;sys/select.h&gt;
 #include &lt;sys/types.h&gt;
 #include &lt;sys/socket.h&gt;
 #include &lt;netdb.h&gt;
 #include &lt;netinet/in.h&gt;
 #include &lt;arpa/inet.h&gt;

 #define SOCKADDR_IN sockaddr_in
 #define SOCKADDR sockaddr
 #define HOSTENT hostent
 #define SOCKET_ERROR -1
 #define ADDR_ANY INADDR_ANY
 #define SOCKET int
 #define FD_SET_DATA fd_set
 #define INVALID_SOCKET -1
 #define closesocket close
#endif
#define MAX_SIZE 1024
using namespace std;

#ifdef _WIN32_WINNT

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

#endif

long getAddrFromString(char* ,SOCKADDR_IN* );
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;

  }
}

/* Die Klasse NetSocket */

   class NetSocket
   {

      public:
         void NetSocket::client_open(char*,int);
         void NetSocket::send_message(char* );
         string NetSocket::receive_message(int);
         NetSocket::NetSocket(void);
         string error;
         int error_b;
         SOCKET s;
         SOCKET s1;

     private:
         FD_SET_DATA fdSet;
         long rc;
         SOCKADDR_IN addr;
         char buf[256];
  };    

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

NetSocket::NetSocket(void)
{

}

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

void NetSocket::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 NetSocket::receive_message(int lenght = 0)    
{
error_b = 0;
int std =1,rc2;
string received;
timeval t;
t.tv_sec  = 1;
t.tv_usec = 0;

if(lenght == 0)
 lenght = 2000000;
else
  std = 0;

char * buf = new char[lenght];

 do{

  rc = recv(s,buf,sizeof(buf)-1,0);

  if(rc==0)
   {
    error_b = 2;
    break;  
   }

   if(rc==SOCKET_ERROR)
    {
     error_b = 1 ;
     error += &quot;Recv failed!\n&quot;;
    }
    buf[rc]='\0';
    received += buf;

    if(std == 0)
     break;

    FD_ZERO(&amp;fdSet); 
    FD_SET(s,&amp;fdSet); 
    rc2=select(s+1,&amp;fdSet,NULL,NULL,&amp;t); 
    cout &lt;&lt; &quot;hallo&quot; &lt;&lt; endl;

}while(FD_ISSET(s,&amp;fdSet) );    //&amp;&amp; rc != SOCKET_ERROR 

delete buf;
return received;    
}

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

void NetSocket::client_open(char* hostnameOrIp,int port)
{
 if(s)
  closesocket(s);
 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;;
  } 
}

/* ************************************************* */
</code></pre>
<p>Es kann sein das der Code an Stellen sehr schlecht programmiert/geschrieben ist dafür möchte ich mich entschuldigen bin noch Anfänger.</p>
<p>Ich möchte mich trozdem schonmal für eure Hilfe bedanken.</p>
<p>gruß twitch</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/174099/das-google-logo-gif-ansehen-http-etc</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 13:08:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/174099.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 22 Feb 2007 21:13:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Das google logo.gif ansehen(Http etc.) on Thu, 22 Feb 2007 21:13:44 GMT]]></title><description><![CDATA[<p>Hallo wie der Titel auch schon verrät möchte ich mir gerne das Google Logo auf den Pc speichern und ansehen. Leider klappt das nicht, mein Programm lädt zwar die komplette Datei und speichert sie auch aber ich kann sie einfach nicht ansehen, denn soblad ich sie öffne sagt mir Paint, dass die Datei fehlerhaft ist!</p>
<p>Ich poste euch am besten den Code, der verrät euch wohl am meisten.</p>
<pre><code class="language-cpp">#define _WIN32_WINNT 0x500
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &quot;sockets.h&quot;
using namespace std;

int main(void)
{
string get;
startWinsock(); //muss man aufrufen um &quot;Netzwerksupport&quot; zu bekommen
NetSocket sx;   //Objekt erstellen und...
sx.client_open(&quot;google.de&quot;,80);  

sx.send_message(&quot;GET http://www.google.de/intl/de_de/images/logo.gif HTTP/1.1\nHost: google.de\nConnection: close/\n\n&quot;);  //Request senden,muss immer mit 2 \n enden 

get = sx.receive_message();  //Serverrückgabe nach &quot;get&quot;

string::size_type loc = get.find( &quot;GIF&quot;, 0 ); //Den Http-Header finden...

if( loc != string::npos )
{
    get.erase(0,loc);   //...und abschneiden
}

fstream file(&quot;C:\\outlay.gif&quot;,fstream::out | fstream::in | fstream::binary | fstream::trunc);
file.write(get.c_str(),strlen(get.c_str())); //
file.close();

cout &lt;&lt; &quot;\n\n&quot;;
system(&quot;PAUSE&quot;);
return 0;    
}
</code></pre>
<p>Jetzt noch die socket.h :</p>
<pre><code class="language-cpp">#ifdef _WIN32_WINNT
 #include &lt;windows.h&gt;
 #include &lt;winsock2.h&gt;
 #define SOCKADDR_IN SOCKADDR_IN
 #define SOCKADDR SOCKADDR
 #define HOSTENT HOSTENT
 #define FD_SET_DATA FD_SET
#else
 #include &lt;sys/select.h&gt;
 #include &lt;sys/types.h&gt;
 #include &lt;sys/socket.h&gt;
 #include &lt;netdb.h&gt;
 #include &lt;netinet/in.h&gt;
 #include &lt;arpa/inet.h&gt;

 #define SOCKADDR_IN sockaddr_in
 #define SOCKADDR sockaddr
 #define HOSTENT hostent
 #define SOCKET_ERROR -1
 #define ADDR_ANY INADDR_ANY
 #define SOCKET int
 #define FD_SET_DATA fd_set
 #define INVALID_SOCKET -1
 #define closesocket close
#endif
#define MAX_SIZE 1024
using namespace std;

#ifdef _WIN32_WINNT

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

#endif

long getAddrFromString(char* ,SOCKADDR_IN* );
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;

  }
}

/* Die Klasse NetSocket */

   class NetSocket
   {

      public:
         void NetSocket::client_open(char*,int);
         void NetSocket::send_message(char* );
         string NetSocket::receive_message(int);
         NetSocket::NetSocket(void);
         string error;
         int error_b;
         SOCKET s;
         SOCKET s1;

     private:
         FD_SET_DATA fdSet;
         long rc;
         SOCKADDR_IN addr;
         char buf[256];
  };    

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

NetSocket::NetSocket(void)
{

}

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

void NetSocket::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 NetSocket::receive_message(int lenght = 0)    
{
error_b = 0;
int std =1,rc2;
string received;
timeval t;
t.tv_sec  = 1;
t.tv_usec = 0;

if(lenght == 0)
 lenght = 2000000;
else
  std = 0;

char * buf = new char[lenght];

 do{

  rc = recv(s,buf,sizeof(buf)-1,0);

  if(rc==0)
   {
    error_b = 2;
    break;  
   }

   if(rc==SOCKET_ERROR)
    {
     error_b = 1 ;
     error += &quot;Recv failed!\n&quot;;
    }
    buf[rc]='\0';
    received += buf;

    if(std == 0)
     break;

    FD_ZERO(&amp;fdSet); 
    FD_SET(s,&amp;fdSet); 
    rc2=select(s+1,&amp;fdSet,NULL,NULL,&amp;t); 
    cout &lt;&lt; &quot;hallo&quot; &lt;&lt; endl;

}while(FD_ISSET(s,&amp;fdSet) );    //&amp;&amp; rc != SOCKET_ERROR 

delete buf;
return received;    
}

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

void NetSocket::client_open(char* hostnameOrIp,int port)
{
 if(s)
  closesocket(s);
 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;;
  } 
}

/* ************************************************* */
</code></pre>
<p>Es kann sein das der Code an Stellen sehr schlecht programmiert/geschrieben ist dafür möchte ich mich entschuldigen bin noch Anfänger.</p>
<p>Ich möchte mich trozdem schonmal für eure Hilfe bedanken.</p>
<p>gruß twitch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233680</guid><dc:creator><![CDATA[twitch]]></dc:creator><pubDate>Thu, 22 Feb 2007 21:13:44 GMT</pubDate></item><item><title><![CDATA[Reply to Das google logo.gif ansehen(Http etc.) on Thu, 22 Feb 2007 21:23:45 GMT]]></title><description><![CDATA[<p>Dein Code ist zum Teil nicht wirklich richtig ...</p>
<pre><code class="language-cpp">class NetSocket
{
public:
    NetSocket() : m_socket(NULL), m_socket2(NULL) {} 

public:
    bool client_open(const std::string&amp;, unsigned short); // Da das fehlschlagen kann ist hier Bool angebracht. nen port wird wohl eher nicht soo ne hohe Zahl sein ... und auch nicht im negativen Bereich ...
    bool send_message(const std::string&amp;);
    std::string receive_message(int);

private:
    SOCKET m_socket;
    SOCKET m_socket2;
    FD_SET_DATA m_fdSet;
    SOCKADDR_IN m_addr;
};
</code></pre>
<pre><code class="language-cpp">// bsw. send_message
bool NetSocket::send_message(const std::string&amp; message)
{
    return (send(s, message.c_str(), message.length(), 0) != SOCKET_ERROR)
}
// So ist das nen schöner kurzer Code ...
</code></pre>
<p>und dann sowas:</p>
<pre><code class="language-cpp">long getAddrFromString(char* ,SOCKADDR_IN* );
long getAddrFromString(char* hostnameOrIp, SOCKADDR_IN* addr)
{
</code></pre>
<p>das macht keinen Sinn ... das würde man nur machen, wenn da zwischen eine Funktion stehen würde die die Funktion schon kenne muss aber du die definition der Funktion erst an viel späterer stelle schreiben willst/kannst ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233688</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233688</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Thu, 22 Feb 2007 21:23:45 GMT</pubDate></item><item><title><![CDATA[Reply to Das google logo.gif ansehen(Http etc.) on Thu, 22 Feb 2007 21:34:10 GMT]]></title><description><![CDATA[<p>Danke schonmal, ich habe ja gesagt, dass der Code stellenweise nicht sehr toll ist, aber deine Änderungen tragen trozdem nicht dazu bei dass ich die gif datei fehlerfrei anschauen kann :). Trozdem vielen dank für deine Antwort <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/1233698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233698</guid><dc:creator><![CDATA[twitch]]></dc:creator><pubDate>Thu, 22 Feb 2007 21:34:10 GMT</pubDate></item><item><title><![CDATA[Reply to Das google logo.gif ansehen(Http etc.) on Thu, 22 Feb 2007 21:36:39 GMT]]></title><description><![CDATA[<p>mal abgesehen das</p>
<pre><code class="language-cpp">fstream file(&quot;C:\\outlay.gif&quot;,fstream::out | fstream::in | fstream::binary | fstream::trunc);
file.write(get.c_str(),strlen(get.c_str())); //
</code></pre>
<p>nicht wirklich erfolg haben wird, da ein gif-bild nicht nur aus alphanumerischen zeichen besteht (was ich meine, &quot;get&quot; ist ein std::string, das verhalten bei steuerzeichen ist nicht unbedingt vorhersehbar, kann sein das er dafür missbraucht werden kann aber das hab ich noch nicht selber getestet)</p>
<p>ich hab was ähnliches gehabt, ich hab ne portweiterleitung gebaut (simples kopieren von socket a nach b) und dabei auch string verwendet, bei bildern isser immer ausgestiegen</p>
<p>dann hab ich einfach nen unsigned char array genomm und das blockweise umgepumpt.</p>
<p>versuch es doch mit einem memorystream btw. jag es doch dierekt in die datei ... schau dir aber mal spasseshalber an WAS in get landet, vielleicht wirste daraus schlau</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233699</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233699</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Thu, 22 Feb 2007 21:36:39 GMT</pubDate></item><item><title><![CDATA[Reply to Das google logo.gif ansehen(Http etc.) on Thu, 22 Feb 2007 21:36:48 GMT]]></title><description><![CDATA[<p>Also sollte ich anstatt string lieber char verwenden oder wie meinst du das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233702</guid><dc:creator><![CDATA[twitch]]></dc:creator><pubDate>Thu, 22 Feb 2007 21:36:48 GMT</pubDate></item><item><title><![CDATA[Reply to Das google logo.gif ansehen(Http etc.) on Thu, 22 Feb 2007 21:42:47 GMT]]></title><description><![CDATA[<p>sorry wollt das als antwort machen und nicht editiern, also einmal hochscrollen bitte</p>
<p>und nochwas hinterher</p>
<pre><code class="language-cpp">string::size_type loc = get.find( &quot;GIF&quot;, 0 ); //Den Http-Header finden...

if( loc != string::npos )
{
    get.erase(0,loc);   //...und abschneiden
}
</code></pre>
<p>schlag mich bitte nicht wenn ich jetzt was falsches sage, aber zeigt loc nicht auf den anfang von &quot;GIF&quot; ?? musst du beim schneiden das &quot;GIF&quot; nicht auch noch entfernen .... btw. woher weist du das hinter den erwünschten daten nicht noch irgendwelches zeug übertragen wird (hab den rest nicht ganz vertsanden, kann gut sein das einer der vorhergehenden befehle das eingrenzt)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233705</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Thu, 22 Feb 2007 21:42:47 GMT</pubDate></item><item><title><![CDATA[Reply to Das google logo.gif ansehen(Http etc.) on Thu, 22 Feb 2007 21:51:16 GMT]]></title><description><![CDATA[<p>Danke das werde ich gleich mal ausprobieren. Zu deinem editiertem: Ich habe mir das Logo mal per Firefox heruntergeladen und dann im Editor(Jaa nicht sehr sauber) angesehen und dort sah man das GIF auch noch. Deswegen hab ich angenommen dass das GIF da dran bleiben muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233710</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233710</guid><dc:creator><![CDATA[twitch]]></dc:creator><pubDate>Thu, 22 Feb 2007 21:51:16 GMT</pubDate></item><item><title><![CDATA[Reply to Das google logo.gif ansehen(Http etc.) on Thu, 22 Feb 2007 21:51:48 GMT]]></title><description><![CDATA[<p>? Ich weiß gerade nicht die GIF Spezifaktion aber normal steht GIF wahrscheinlich am Anfang ... d.h. wäre das so schon ok weil er halt alles was davor steht nicht haben will ... warum auch immer ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233717</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Thu, 22 Feb 2007 21:51:48 GMT</pubDate></item><item><title><![CDATA[Reply to Das google logo.gif ansehen(Http etc.) on Thu, 22 Feb 2007 21:51:51 GMT]]></title><description><![CDATA[<p>Wenn ich das mal so sagen darf... dein code ist doch viel zu kompliziert für das was du willst^^ Ich mein das könnten man logger mit der hälfte machen <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="😉"
    /></p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233718</guid><dc:creator><![CDATA[Foxx90]]></dc:creator><pubDate>Thu, 22 Feb 2007 21:51:51 GMT</pubDate></item><item><title><![CDATA[Reply to Das google logo.gif ansehen(Http etc.) on Thu, 22 Feb 2007 21:55:50 GMT]]></title><description><![CDATA[<blockquote>
<p>? Ich weiß gerade nicht die GIF Spezifaktion aber normal steht GIF wahrscheinlich am Anfang ... d.h. wäre das so schon ok weil er halt alles was davor steht nicht haben will ... warum auch immer ^^</p>
</blockquote>
<p>Weil davor der HTTP-Header steht und der macht die ganze Datei kaputt deswegen muss der vorher weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233727</guid><dc:creator><![CDATA[twitch]]></dc:creator><pubDate>Thu, 22 Feb 2007 21:55:50 GMT</pubDate></item><item><title><![CDATA[Reply to Das google logo.gif ansehen(Http etc.) on Thu, 22 Feb 2007 22:02:50 GMT]]></title><description><![CDATA[<p>trotzdem, sag doch mal wofür genau du das brauchst, weiles gäbe diverse einfachere möglichkeiten, ein simpler downloadmanager z.b.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233735</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Thu, 22 Feb 2007 22:02:50 GMT</pubDate></item><item><title><![CDATA[Reply to Das google logo.gif ansehen(Http etc.) on Thu, 22 Feb 2007 22:04:00 GMT]]></title><description><![CDATA[<p>ICh wollte einfach mal ausprobieren etwas über http herunterzuladen wenn es auch einfacher geht dann würde ich es auch einfacher machen ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233736</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233736</guid><dc:creator><![CDATA[twitch]]></dc:creator><pubDate>Thu, 22 Feb 2007 22:04:00 GMT</pubDate></item><item><title><![CDATA[Reply to Das google logo.gif ansehen(Http etc.) on Thu, 22 Feb 2007 22:06:21 GMT]]></title><description><![CDATA[<p>ich hau mich morgen mal dahinter, eigentlich n ganzt interessanter gedanke ^^<br />
was spricht eigentlich gegen rechtsklick bild speichern unter ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233740</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Thu, 22 Feb 2007 22:06:21 GMT</pubDate></item><item><title><![CDATA[Reply to Das google logo.gif ansehen(Http etc.) on Thu, 22 Feb 2007 23:38:37 GMT]]></title><description><![CDATA[<p>ceos schrieb:</p>
<blockquote>
<p>was spricht eigentlich gegen rechtsklick bild speichern unter?</p>
</blockquote>
<p>Ich finds immer toll, wenn es Menschen gibt die wissen wollen, wie man's selbst macht.</p>
<p>Greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233785</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Thu, 22 Feb 2007 23:38:37 GMT</pubDate></item><item><title><![CDATA[Reply to Das google logo.gif ansehen(Http etc.) on Fri, 23 Feb 2007 07:36:05 GMT]]></title><description><![CDATA[<p>twitch schrieb:</p>
<blockquote>
<pre><code class="language-cpp">file.write(get.c_str(),strlen(get.c_str())); //
</code></pre>
</blockquote>
<p>Das funktioniert so nicht. Die Variable get ist ein std::string. Und ein std::string kann (im gegensatz zur Behauptung von Ceos <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="👎"
    /> ) sehr wohl mit Steuerzeichen umgehen. strlen allerdings nicht. Ein strlen(get.c_str()) liefert die Anzahl der Bytes bis zum ersten Null-Zeichen, welcher wahrscheinlich in deiner GIF-Datei vorkommt. Um die Länge des Strings zu bekommen, solltest Du get.size() verwenden.</p>
<p>Und noch ein Tip: Die http-Header werden von der Zeichenfolge &quot;\r\n\r\n&quot;, also eine Leerzeile vom http-Body getrennt. Statt nach &quot;GIF&quot; zu suchen, solltest Du nach dieser Zeichenfolge suchen. Damit bist Du nicht auf GIF beschränkt.</p>
<p>Tntnet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233838</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233838</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Fri, 23 Feb 2007 07:36:05 GMT</pubDate></item><item><title><![CDATA[Reply to Das google logo.gif ansehen(Http etc.) on Fri, 23 Feb 2007 08:51:22 GMT]]></title><description><![CDATA[<p>ich find solche spitzen echt nett</p>
<blockquote>
<p>(im gegensatz zur Behauptung von Ceos <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="👎"
    /> )</p>
</blockquote>
<p>das nächste mal liesst du dir meinen satz genauer durch<br />
DANKE <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>
<p>das erklärt aber nicht wieso dann bei mir der string nicht funktioniert hat, und ich habe sogar mit dem result von recv(); gearbeitet, mich also garnicht erst mit strlen oder size rumgeschlagen...<br />
dennoch hat mir der string nach ein paar bytes schlicht und einfach die ausgabe verwehrt (und damit mein ich nciht die ausgabe auf dem bildschrim sondern das zeichenweise senden was ich irrtümlicherweise angetrebt hatte, das brach nach knapp 30 zeichen einfach mit zugriffsverletzung ab)<br />
ich habs nicht weiter debuggt sondern einfach n char array angelegt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233905</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233905</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Fri, 23 Feb 2007 08:51:22 GMT</pubDate></item><item><title><![CDATA[Reply to Das google logo.gif ansehen(Http etc.) on Fri, 23 Feb 2007 10:47:21 GMT]]></title><description><![CDATA[<p>Ceos schrieb:</p>
<blockquote>
<p>(was ich meine, &quot;get&quot; ist ein std::string, das verhalten bei steuerzeichen ist nicht unbedingt vorhersehbar, kann sein das er dafür missbraucht werden kann aber das hab ich noch nicht selber getestet)</p>
</blockquote>
<p>Ich verstehe diesen Satz so, daß Du uns darüber in Kenntnis setzen willst, daß Du nicht weißt, ob Steuerzeichen im std::string ok sind. Zufällig weiß ich, daß das Verhalten eines std::strings bei Steuerzeichen vorhersebar ist. Nämlich Steuerzeichen inklusive Null-Byte sind im std::string ok. Du kannst beliebige Binärdaten inklusive GIF-Grafiken in einem std::string halten.</p>
<p>Wenn Du Probleme mit Steuerzeichen in einem std::string, dann liegt das nicht am std::string, sondern in der Art und Weise, wie Du damit umgehst. Wäre sicherlich hilfreich, wenn Du die Codesequenz posten könntest, wo Du probleme hattest.</p>
<p>Dennoch entschuldige ich mich, wenn Du Dich angegriffen gefühlt hast. Das war nicht meine Absicht.</p>
<p>Tntnet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233991</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Fri, 23 Feb 2007 10:47:21 GMT</pubDate></item><item><title><![CDATA[Reply to Das google logo.gif ansehen(Http etc.) on Fri, 23 Feb 2007 10:51:08 GMT]]></title><description><![CDATA[<p>leider hab ich den code in der form nicht mehr aber mir dämmert da was, kann es sein das c_str() nur bis zu einem \0 geht, ich glaub ich hatte das in der art ausgelesen, hatte dann zwar noch was mit zeichenweise implementiert aber wieder verworfen und hab gleich n kopierarray angelegt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233993</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Fri, 23 Feb 2007 10:51:08 GMT</pubDate></item></channel></rss>