<?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[Fehler beim Empfangen von Daten]]></title><description><![CDATA[<p>Hi,<br />
Habe mal wieder mit Sockets arbeiten müssen(UDP), habe dazu eine Klasse geschrieben<br />
die bis auf das Empfangen funktioniert. Hier mal die dekleration der Funktionen:</p>
<pre><code class="language-cpp">char* network::send2server(char* messange) {
int res = send(sock,messange,sizeof(messange),0); // Sende Befehl an Server
int strange;
char* buffer2;
do
{
strange = recv(sock,buffer2,1,0);
std::cout &lt;&lt; strange &lt;&lt; std::endl;
} while(strange != -1);
}
</code></pre>
<p>Also ich sende einen Befehl an den Server und bekomme als rückgabe die angzahl der gesendeten zeichen.<br />
Aber beim recv bekomme ich immer -1 aber warum?<br />
Ist meine denkweiße falsch? Ich habe mir es so gedacht, da ich ja nicht weiß wie lange die Antwort vom server ist, dass ich immer ein Zeichen empfange und wenn keins mehr empfangen wird die schleife beende!</p>
<p>MFG ReduX</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/197845/fehler-beim-empfangen-von-daten</link><generator>RSS for Node</generator><lastBuildDate>Thu, 01 Oct 2026 18:09:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/197845.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 15 Nov 2007 12:50:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fehler beim Empfangen von Daten on Thu, 15 Nov 2007 12:50:55 GMT]]></title><description><![CDATA[<p>Hi,<br />
Habe mal wieder mit Sockets arbeiten müssen(UDP), habe dazu eine Klasse geschrieben<br />
die bis auf das Empfangen funktioniert. Hier mal die dekleration der Funktionen:</p>
<pre><code class="language-cpp">char* network::send2server(char* messange) {
int res = send(sock,messange,sizeof(messange),0); // Sende Befehl an Server
int strange;
char* buffer2;
do
{
strange = recv(sock,buffer2,1,0);
std::cout &lt;&lt; strange &lt;&lt; std::endl;
} while(strange != -1);
}
</code></pre>
<p>Also ich sende einen Befehl an den Server und bekomme als rückgabe die angzahl der gesendeten zeichen.<br />
Aber beim recv bekomme ich immer -1 aber warum?<br />
Ist meine denkweiße falsch? Ich habe mir es so gedacht, da ich ja nicht weiß wie lange die Antwort vom server ist, dass ich immer ein Zeichen empfange und wenn keins mehr empfangen wird die schleife beende!</p>
<p>MFG ReduX</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1403618</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1403618</guid><dc:creator><![CDATA[ReduX]]></dc:creator><pubDate>Thu, 15 Nov 2007 12:50:55 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler beim Empfangen von Daten on Thu, 15 Nov 2007 12:57:06 GMT]]></title><description><![CDATA[<p>Erstens: Die Rückgab &quot;-1&quot; deutet auf einen Fehler hin.</p>
<p>Zweitens: Bitte übergibt keine nicht-initialisierten Zeiger an fremde Funktionen - recv() erwartet, daß an der übergebenen Adresse genug Platz verfügbar ist (-&gt; SegFault).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1403627</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1403627</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 15 Nov 2007 12:57:06 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler beim Empfangen von Daten on Thu, 15 Nov 2007 14:12:58 GMT]]></title><description><![CDATA[<p>Hi,<br />
Da liegt ja mein Problem das ich -1 zurück bekomme.<br />
Weil als erstes verbinde ich mich auf den server mit connect(); dort bekomme ich eine 0 zurück geliefert dies bedeutet ja das es keinen Fehler gab. Dannach sende ich mit send einen Befehl an den server und auch da bekomme ich die anzahl der gesendeten Zeichen zurück, d.h. das es auch da keinen Fehler gab aber warum gibt es dann bei recv einen Fehler? Der Socket ist der gleiche wie bei den anderen Funktionen.</p>
<p>MFG ReduX</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1403683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1403683</guid><dc:creator><![CDATA[ReduX]]></dc:creator><pubDate>Thu, 15 Nov 2007 14:12:58 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler beim Empfangen von Daten on Thu, 15 Nov 2007 14:25:55 GMT]]></title><description><![CDATA[<p>Du musst Postings schon mal bis zum Ende lesen, CStoll hat 2 (zwei) Punkte angekreidet.</p>
<p>Edit: mal abgesehen davon macht</p>
<pre><code class="language-cpp">send(sock,messange,sizeof(messange),0);
</code></pre>
<p>sicherlich nicht das, was du willst. sizeof(messange) sollte auf 32 Bit Systemen 32Bit sein (da simpler Zeiger), es werden also die ersten 4 Byte des char-arrays gesendet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1403692</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1403692</guid><dc:creator><![CDATA[DeSoVoDaMu]]></dc:creator><pubDate>Thu, 15 Nov 2007 14:25:55 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler beim Empfangen von Daten on Thu, 15 Nov 2007 14:53:51 GMT]]></title><description><![CDATA[<p>Hi,<br />
Hab das mit send jetzt auf string umgebaut und auch recv wenn ichs richtig versanden habe:</p>
<pre><code class="language-cpp">char* network::send2server(std::string messange) {
int res = send(sock,messange.c_str(),messange.size(),0);
std::cout &lt;&lt; res &lt;&lt; std::endl;
int strange;
char buffer2[256];
strange = recv(sock,buffer2,strlen(buffer2),0);
buffer2[strange]='\0';
printf(&quot;Empfangene Daten: %s\n&quot;,buffer2);
std::cout &lt;&lt; strange &lt;&lt; std::endl;

}
</code></pre>
<p>So bei send bekomme ich eine 1 zurück egal wie lange der string ist, ist das richtig so? habe gedacht das send die anzahl der gesendeten Zeichen zurückgibt(laut Buch).<br />
Beim Empfangen bleibt er allerdings stehen und die minuten gehn so ins Land und nichts passiert!</p>
<p>MFG ReduX</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1403723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1403723</guid><dc:creator><![CDATA[ReduX]]></dc:creator><pubDate>Thu, 15 Nov 2007 14:53:51 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler beim Empfangen von Daten on Thu, 15 Nov 2007 15:18:10 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">strange = recv(sock,buffer2,strlen(buffer2),0);
</code></pre>
<p>strlen sucht nach der ersten Null in deinem nicht initialisierten buffer2 und gibt an wie viele andere Zeichen es davor gibt. Das kann 1 oder was anderes sein, kann aber auch in einem SegFault enden. Übergeben sollte man die Kapazität des Buffers.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1403752</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1403752</guid><dc:creator><![CDATA[Nanyuki]]></dc:creator><pubDate>Thu, 15 Nov 2007 15:18:10 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler beim Empfangen von Daten on Thu, 15 Nov 2007 15:35:01 GMT]]></title><description><![CDATA[<p>Hi,<br />
Habe das nun mit strlen geändert tut sich aber immer nochnichts, was meinste mit intalisieren? buffer2 wurde ja deklariert das reicht doch.</p>
<p>MFG ReduX</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1403777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1403777</guid><dc:creator><![CDATA[ReduX]]></dc:creator><pubDate>Thu, 15 Nov 2007 15:35:01 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler beim Empfangen von Daten on Thu, 15 Nov 2007 15:39:19 GMT]]></title><description><![CDATA[<p>ReduX schrieb:</p>
<blockquote>
<p>Hi,<br />
buffer2 wurde ja deklariert das reicht doch.</p>
<p>MFG ReduX</p>
</blockquote>
<p>NEIN! Das reicht garantiert nicht.<br />
Wo soll recv denn die Daten hinpacken, wenn der Funktion kein Speicher bereitgestellt wurde?</p>
<p>Das musst du schon selber mit buffer2 = new char[&lt;beliebige_länge&gt;]; tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1403780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1403780</guid><dc:creator><![CDATA[The-Kenny]]></dc:creator><pubDate>Thu, 15 Nov 2007 15:39:19 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler beim Empfangen von Daten on Thu, 15 Nov 2007 16:04:12 GMT]]></title><description><![CDATA[<p>buffer2 hat schon seinen Speicher. Es ist ja auf dem Stack erzeugt.<br />
Initialisieren wäre ganz praktisch, ist aber hier nicht unbedingt erforderlich. Man sollte vielleicht noch kontrollieren ob strange &lt;256 ist befor man auf dieses Element zugreift.</p>
<pre><code class="language-cpp">char buffer2[256] = {}; //jetzt ist es initialisiert
strange = recv(sock,buffer2,strlen(buffer2),0);
if( strange &gt; 0) // bei Fehler sollte man den schon abfangen
{
   if( strange &gt; 255 ) strange = 255;
   buffer2[strange]='\0';
</code></pre>
<p>// und weiter[cpp]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1403805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1403805</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 15 Nov 2007 16:04:12 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler beim Empfangen von Daten on Thu, 15 Nov 2007 17:17:45 GMT]]></title><description><![CDATA[<p>Braunstein, du hast trotzdem ja noch strlen() drin, d.h. er versucht immer 0 Bytes zu empfangen...<br />
Also so ist's richtig:</p>
<pre><code class="language-cpp">char buffer2[256] = {}; //jetzt ist es initialisiert
strange = recv(sock,buffer2,sizeof(buffer2),0); // bzw. 256
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1403851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1403851</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Thu, 15 Nov 2007 17:17:45 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler beim Empfangen von Daten on Thu, 15 Nov 2007 17:25:33 GMT]]></title><description><![CDATA[<p>Hi,<br />
kann man es dann wieder so machen wie ich es am Anfagn hatte, also das er immer ein Zeichen einliesßt und an einen string hängt bis nichts mehr kommt?<br />
Weil mein Programm wird in einem Bereich eingesetzt wo es schonmal sehr viele Zeichen werden können.<br />
Also so?:</p>
<pre><code class="language-cpp">char buffer2 = {}; //Braucht ja nur ein Zeichen
int strange;
do
{
strange = recv(sock,buffer2,1,0);
// Hier dann an string dranhängen
} while(strange != 0);
</code></pre>
<p>Bin gerade an einem anderen PC und kann hier nichts testen, würde dies dann aber so funktionieren?(Sry wenn ich frag aber hab mich mit Sockets nochnicht so beschäftigt)</p>
<p>Schöner Abend noch!<br />
MFG ReduX</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1403854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1403854</guid><dc:creator><![CDATA[ReduX]]></dc:creator><pubDate>Thu, 15 Nov 2007 17:25:33 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler beim Empfangen von Daten on Thu, 15 Nov 2007 18:03:27 GMT]]></title><description><![CDATA[<p>Es gibt kein &quot;es kommen keine Daten mehr&quot;, d.h. entweder würde der recv() dann endlos warten, oder aber neue Daten kommen (und du würdest die dann an die alten ranhängen).</p>
<p>Wenn du eine feste Puffergröße sendest, dann empfange auch gleich soviele Daten.<br />
Wenn du dagegen unterschiedlich lange Daten sendest, dann übertrage zuerst deren Länge (als unsigned int - und am besten mit ntohl()/htonl()netzwerktauglich machen) und lies erst die Größe aus, und danach dann die restlichen Daten am Stück.</p>
<p>In einem anderen Thread hier im Forum hatte ich das schon mal erklärt<br />
(such mal nach recv()...)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1403879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1403879</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Thu, 15 Nov 2007 18:03:27 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler beim Empfangen von Daten on Thu, 15 Nov 2007 19:00:59 GMT]]></title><description><![CDATA[<p>Hi,<br />
Ja das Problem ist ich kann nicht einfach so die größe vorher senden da der Server nicht verändert werden kann(leider).<br />
Aber ich hab doch da mal was gelesen das wenn keine daten mehr kommen das recv dann null zurückgibt!?!?!</p>
<p>MFG ReduX</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1403931</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1403931</guid><dc:creator><![CDATA[ReduX]]></dc:creator><pubDate>Thu, 15 Nov 2007 19:00:59 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler beim Empfangen von Daten on Thu, 15 Nov 2007 19:04:06 GMT]]></title><description><![CDATA[<p>nein, wenn recv 0 zurückgibt, heisst das, dass die verbindung (auf eine gute art) terminiert ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1403932</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1403932</guid><dc:creator><![CDATA[simon.gysi]]></dc:creator><pubDate>Thu, 15 Nov 2007 19:04:06 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler beim Empfangen von Daten on Fri, 16 Nov 2007 20:09:32 GMT]]></title><description><![CDATA[<p>Hi,<br />
Edit:<br />
Ich bekomme nun bei Empfangen: Anzahl der Zeichen 9.<br />
Dannach stürzt das Programm ab und es werden keine daten angezeigt <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 />
MFG ReduX</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1404255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1404255</guid><dc:creator><![CDATA[ReduX]]></dc:creator><pubDate>Fri, 16 Nov 2007 20:09:32 GMT</pubDate></item></channel></rss>