<?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[Tastatureingabe mit Sockets]]></title><description><![CDATA[<p>Hallo allerseits,<br />
Ich schreibe gerade auf der Windows-Konsole einen kleinen Client für HTTP bei dem jedoch der Paketinhalt selbst eingetippt werden soll.</p>
<p>Egal welchen Server ich teste, ich bekomme jedesmal die Fehlermeldung 400 Bad Request zurück.</p>
<p>Wenn ich allerdings den Paketinhalt schon im Prog. im Char-Array definiere, klappt alles wunderbar. Nur mit der Tastatureingabe geht es nicht.</p>
<p>Ich habe mir auch die Variable wieder ausgeben lassen um zu gucken ob es beim Einlesen einen Fehler gab, aber der Inhalt ist sauber.</p>
<p>Hier der Kode meines beta-Hiobs Programms:</p>
<pre><code>#include &lt;windows.h&gt;
#include &lt;iostream&gt;
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

#define BUF_SIZ 4096

using namespace std;

int main()
{
 char buf[BUF_SIZ], s_paket[1200];
 int s, bytes;
 string ipx;

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

 while(1)
 {
  bytes = 1;
  cout &lt;&lt; &quot; IP: &quot;;
  cin &gt;&gt; ipx;
  cout &lt;&lt; &quot;\n Inhalt: &quot;;
  cin.ignore(1, '\n');
  cin.getline(s_paket, sizeof(s_paket));
  cout &lt;&lt; '\n';

  const char *ipaddrx = ipx.c_str();
  s = socket(PF_INET, SOCK_STREAM, 0);

  struct sockaddr_in addr;

  addr.sin_addr.s_addr = inet_addr(ipaddrx);
  addr.sin_port = htons(80);
  addr.sin_family = AF_INET;

  if(connect(s, (struct sockaddr*) &amp;addr, sizeof(addr)) == -1)
  {
   cout &lt;&lt; &quot;\n\n keine Verbindung.\n&quot;;
  }
  else
  {
   cout &lt;&lt; &quot;\n\n Verbindung hergestellt.\n\n&quot;;

   send(s, s_paket, strlen(s_paket), 0);

   while(bytes != 0)
   {
    bytes = recv(s, buf, sizeof(buf)-1, 0);

    buf[bytes] = '\0';
    printf(&quot;%s&quot;, buf);
    cout &lt;&lt; '\n';
   }
  }
  cout &lt;&lt; &quot;\n Verbindung vom Server beendet.\n\n&quot;;
  closesocket(s);
 }
 return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/328247/tastatureingabe-mit-sockets</link><generator>RSS for Node</generator><lastBuildDate>Wed, 08 Jul 2026 03:38:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/328247.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 29 Sep 2014 21:56:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Tastatureingabe mit Sockets on Mon, 29 Sep 2014 21:56:17 GMT]]></title><description><![CDATA[<p>Hallo allerseits,<br />
Ich schreibe gerade auf der Windows-Konsole einen kleinen Client für HTTP bei dem jedoch der Paketinhalt selbst eingetippt werden soll.</p>
<p>Egal welchen Server ich teste, ich bekomme jedesmal die Fehlermeldung 400 Bad Request zurück.</p>
<p>Wenn ich allerdings den Paketinhalt schon im Prog. im Char-Array definiere, klappt alles wunderbar. Nur mit der Tastatureingabe geht es nicht.</p>
<p>Ich habe mir auch die Variable wieder ausgeben lassen um zu gucken ob es beim Einlesen einen Fehler gab, aber der Inhalt ist sauber.</p>
<p>Hier der Kode meines beta-Hiobs Programms:</p>
<pre><code>#include &lt;windows.h&gt;
#include &lt;iostream&gt;
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

#define BUF_SIZ 4096

using namespace std;

int main()
{
 char buf[BUF_SIZ], s_paket[1200];
 int s, bytes;
 string ipx;

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

 while(1)
 {
  bytes = 1;
  cout &lt;&lt; &quot; IP: &quot;;
  cin &gt;&gt; ipx;
  cout &lt;&lt; &quot;\n Inhalt: &quot;;
  cin.ignore(1, '\n');
  cin.getline(s_paket, sizeof(s_paket));
  cout &lt;&lt; '\n';

  const char *ipaddrx = ipx.c_str();
  s = socket(PF_INET, SOCK_STREAM, 0);

  struct sockaddr_in addr;

  addr.sin_addr.s_addr = inet_addr(ipaddrx);
  addr.sin_port = htons(80);
  addr.sin_family = AF_INET;

  if(connect(s, (struct sockaddr*) &amp;addr, sizeof(addr)) == -1)
  {
   cout &lt;&lt; &quot;\n\n keine Verbindung.\n&quot;;
  }
  else
  {
   cout &lt;&lt; &quot;\n\n Verbindung hergestellt.\n\n&quot;;

   send(s, s_paket, strlen(s_paket), 0);

   while(bytes != 0)
   {
    bytes = recv(s, buf, sizeof(buf)-1, 0);

    buf[bytes] = '\0';
    printf(&quot;%s&quot;, buf);
    cout &lt;&lt; '\n';
   }
  }
  cout &lt;&lt; &quot;\n Verbindung vom Server beendet.\n\n&quot;;
  closesocket(s);
 }
 return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2419937</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2419937</guid><dc:creator><![CDATA[aloha55]]></dc:creator><pubDate>Mon, 29 Sep 2014 21:56:17 GMT</pubDate></item><item><title><![CDATA[Reply to Tastatureingabe mit Sockets on Mon, 29 Sep 2014 22:48:00 GMT]]></title><description><![CDATA[<p>Wie bekommst du das \r\n in den Puffer? Und das \0?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2419943</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2419943</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Mon, 29 Sep 2014 22:48:00 GMT</pubDate></item><item><title><![CDATA[Reply to Tastatureingabe mit Sockets on Tue, 30 Sep 2014 04:46:48 GMT]]></title><description><![CDATA[<blockquote>
<p>400 Bad Request</p>
</blockquote>
<p>kommt normalerweise von IIS-servern.<br />
Du musst ordentliche header versenden um das zu vermeiden.</p>
<p>Ausser wenn dein kompletter request schon Quatsch ist. Dann kriegst du natürlich auch Quatsch (400) vom Empfänger zurück.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2419954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2419954</guid><dc:creator><![CDATA[EOP]]></dc:creator><pubDate>Tue, 30 Sep 2014 04:46:48 GMT</pubDate></item><item><title><![CDATA[Reply to Tastatureingabe mit Sockets on Tue, 30 Sep 2014 08:14:22 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Und das \0?</p>
</blockquote>
<p>Det sollte <code>getline</code> erledigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2419981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2419981</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 30 Sep 2014 08:14:22 GMT</pubDate></item><item><title><![CDATA[Reply to Tastatureingabe mit Sockets on Tue, 30 Sep 2014 13:13:39 GMT]]></title><description><![CDATA[<p>Ich achte natürlich darauf dass ich korrekte Requests eintippe. Wenn ich einen Req im Char-Array definiere und auf die &quot;Inhalt&quot;-Eingabe verzichte bekomme ich die korrekte Seite vom Server.</p>
<p>Ich nehme mal an es gibt Probleme mit der Eingabe von \r\n und/oder cin.ignore</p>
<p>Die Eingabe funktioniert aber, wenn ich s_paket mit Getline eingebe, und mir s_paket mit cout ausgeben lasse, ist der Inhalt richtig.</p>
<p>Ich versteh nicht welche Zeichenfolge(n) fehlerhaft sein sollen, bzw was das Programm für einen MÜLL raussendet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2420051</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2420051</guid><dc:creator><![CDATA[aloha55]]></dc:creator><pubDate>Tue, 30 Sep 2014 13:13:39 GMT</pubDate></item><item><title><![CDATA[Reply to Tastatureingabe mit Sockets on Tue, 30 Sep 2014 13:28:23 GMT]]></title><description><![CDATA[<p>aloha55 schrieb:</p>
<blockquote>
<p>Die Eingabe funktioniert aber, wenn ich s_paket mit Getline eingebe, und mir s_paket mit cout ausgeben lasse, ist der Inhalt richtig.</p>
</blockquote>
<p>Da steht dann \r\n drin? Das hältst du dann für richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2420054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2420054</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 30 Sep 2014 13:28:23 GMT</pubDate></item><item><title><![CDATA[Reply to Tastatureingabe mit Sockets on Tue, 30 Sep 2014 13:57:31 GMT]]></title><description><![CDATA[<p>Ja die Zeichen werden so mit ausgegeben. Und jetzt wo ich darüber nachdenke müssten die Escape-Sequenzen eigentlich ausgeführt werden statt mit den Bustaben angezeigt.<br />
Ich weiß aber nichts über den Buffer und brauche hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2420060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2420060</guid><dc:creator><![CDATA[aloha55]]></dc:creator><pubDate>Tue, 30 Sep 2014 13:57:31 GMT</pubDate></item><item><title><![CDATA[Reply to Tastatureingabe mit Sockets on Tue, 30 Sep 2014 18:26:45 GMT]]></title><description><![CDATA[<p>Du müsstest die Escapesequenzen selber parsen und ersetzen.<br />
Du könntest die ASCII-Zeichen direkt eingeben (Alt+013 für \r auf dem Ziffernblock). Keine Ahnung, ob das funktioniert.<br />
Ich würde den Header Zeilenweise in einen std::string einlesen und am Ende jeweils ein &quot;\r\n&quot; anfügen. Die Zeilen würde ich in einem weiteren std:.string zum Header zusammenbauen und dann übertragen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2420122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2420122</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 30 Sep 2014 18:26:45 GMT</pubDate></item><item><title><![CDATA[Reply to Tastatureingabe mit Sockets on Wed, 01 Oct 2014 04:08:13 GMT]]></title><description><![CDATA[<p>Schreib erstmal alles in eine Datei. Dann kannst du kontrollieren was schief läuft.<br />
Wahrscheinlich fehlt das abschließende \r\n\r\n oder sowas.</p>
<p><a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html" rel="nofollow">http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2420184</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2420184</guid><dc:creator><![CDATA[EOP]]></dc:creator><pubDate>Wed, 01 Oct 2014 04:08:13 GMT</pubDate></item></channel></rss>