<?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[Buffer[1024] leeren]]></title><description><![CDATA[<p>Hi,</p>
<p>Ich arbeite grade mit Sockets und habe es mittlerweile geschafft, eine Verbindung zwischen dem Server und Clienten herzustellen...</p>
<p>Jedoch funktioniert etwas nicht so wie ich es will:</p>
<p>Client: Huhu!<br />
Server: Huhu! - Bis dahin ist alles perfekt...<br />
Client: Wie geht´s?<br />
Server: ╗╗╗╗╗╗╗╗╗╗╗<br />
Client: Was?<br />
Server: ╗╗╗<br />
usw...</p>
<p><strong>Server:</strong></p>
<pre><code class="language-cpp">//Empfangen:
rc=recv(clients[i],buf,strlen(buf),0);
//Senden:
std::cout &lt;&lt; &quot;Client ( &quot; &lt;&lt; i &lt;&lt; &quot; ) : &quot; &lt;&lt; buf &lt;&lt; std::endl;
// antwort senden
send(clients[i],buf,strlen(buf),0);
</code></pre>
<p><strong>Client:</strong></p>
<pre><code class="language-cpp">//Einlesen des Strings
std::cout &lt;&lt; &quot;Client: &quot;;
std::cin.getline(buf,1024);
//Senden des Strings
send(s,buf,strlen(buf),0);
//Empfangen des Strings vom Server
rc=recv(s,buf,strlen(buf),0);
</code></pre>
<p>Ich bin mit dem Debugger öfters durchgegangen und habe bemerkt, dass der Server den buffer<br />
[0]: 'H'<br />
[1]: 'a'<br />
[2]: 'l'<br />
[3]: 'l'<br />
[4]: 'o'<br />
[5]: '\0'<br />
[6]: ╗ (52) //oder so<br />
[7]: ╗ (52)<br />
//...</p>
<p>bekommmt, sprich anscheinend wird die Null-Terminierung übersprungen?<br />
Ich bin mit meinem Latein echt am Ende, wäre sehr dankbar wenn mir jemand helfen könnte.</p>
<p>Wenn die Informationen nicht reichen bitte sagen.</p>
<p>Lg Fendrich</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/250886/buffer-1024-leeren</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 19:42:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/250886.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 25 Sep 2009 17:12:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Buffer[1024] leeren on Fri, 25 Sep 2009 17:12:48 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Ich arbeite grade mit Sockets und habe es mittlerweile geschafft, eine Verbindung zwischen dem Server und Clienten herzustellen...</p>
<p>Jedoch funktioniert etwas nicht so wie ich es will:</p>
<p>Client: Huhu!<br />
Server: Huhu! - Bis dahin ist alles perfekt...<br />
Client: Wie geht´s?<br />
Server: ╗╗╗╗╗╗╗╗╗╗╗<br />
Client: Was?<br />
Server: ╗╗╗<br />
usw...</p>
<p><strong>Server:</strong></p>
<pre><code class="language-cpp">//Empfangen:
rc=recv(clients[i],buf,strlen(buf),0);
//Senden:
std::cout &lt;&lt; &quot;Client ( &quot; &lt;&lt; i &lt;&lt; &quot; ) : &quot; &lt;&lt; buf &lt;&lt; std::endl;
// antwort senden
send(clients[i],buf,strlen(buf),0);
</code></pre>
<p><strong>Client:</strong></p>
<pre><code class="language-cpp">//Einlesen des Strings
std::cout &lt;&lt; &quot;Client: &quot;;
std::cin.getline(buf,1024);
//Senden des Strings
send(s,buf,strlen(buf),0);
//Empfangen des Strings vom Server
rc=recv(s,buf,strlen(buf),0);
</code></pre>
<p>Ich bin mit dem Debugger öfters durchgegangen und habe bemerkt, dass der Server den buffer<br />
[0]: 'H'<br />
[1]: 'a'<br />
[2]: 'l'<br />
[3]: 'l'<br />
[4]: 'o'<br />
[5]: '\0'<br />
[6]: ╗ (52) //oder so<br />
[7]: ╗ (52)<br />
//...</p>
<p>bekommmt, sprich anscheinend wird die Null-Terminierung übersprungen?<br />
Ich bin mit meinem Latein echt am Ende, wäre sehr dankbar wenn mir jemand helfen könnte.</p>
<p>Wenn die Informationen nicht reichen bitte sagen.</p>
<p>Lg Fendrich</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1784291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1784291</guid><dc:creator><![CDATA[Fendrich]]></dc:creator><pubDate>Fri, 25 Sep 2009 17:12:48 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer[1024] leeren on Fri, 25 Sep 2009 17:54:52 GMT]]></title><description><![CDATA[<p>server:</p>
<pre><code class="language-cpp">//const size_t BUFFER_SIZE = 1024;
//char buf[BUFFER_SIZE];

//int rc

//Empfangen:
rc = recv(clients[i], buf, BUFFER_SIZE, 0);
if(rc &lt; 0)
//fehlerbehandlung - disconnect oder so

int buf_length = rc;
//Senden:
std::cout &lt;&lt; &quot;Client ( &quot; &lt;&lt; i &lt;&lt; &quot; ) : &quot; &lt;&lt; std::string(buf, buf+buf_length) &lt;&lt; std::endl;

// antwort senden
send(clients[i], buf, buf_length, 0);
</code></pre>
<p>client:</p>
<pre><code class="language-cpp">//Einlesen des Strings
std::cout &lt;&lt; &quot;Client: &quot;;
std::cin.getline(buf,1024);
int buf_length = std::cin.gcount();

//Senden des Strings
send(s, buf, buf_length, 0);
</code></pre>
<p>bb</p>
<p>PS: Dir ist bekannt, dass man auch größere Teile schicken kann als der Empfangs-Buffer groß ist - siehe dazu GetLastError() oder so was in der Richtung...<br />
edit: <a href="http://msdn.microsoft.com/en-us/library/ms740121(VS.85).aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ms740121(VS.85).aspx</a><br />
WSAGetLastError() == WSAEMSGSIZE: <a href="http://msdn.microsoft.com/en-us/library/ms740668(VS.85).aspx#winsock.wsaemsgsize_2" rel="nofollow">http://msdn.microsoft.com/en-us/library/ms740668(VS.85).aspx#winsock.wsaemsgsize_2</a></p>
<p>also so in etwa:</p>
<pre><code class="language-cpp">const size_t BUFFER_SIZE = 1024;

std::string received;
for(char buf[BUFFER_SIZE]; ; )
{
  int length = recv(clients[i], buf, BUFFER_SIZE, 0);
  if(length == SOCKET_ERROR)
  {
    int error_code = WSAGetLastError();
    if(error_code == WSAEMSGSIZE)
    {
      received += std::string(buf, buf+BUFFER_SIZE);
      continue;
    }
    std::cout &lt;&lt; &quot;FEHLER&quot; &lt;&lt; std::endl;
    return;
  }
  received += std::string(buf, buf+length);
  break;
}

std::cout &lt;&lt; &quot;Client ( &quot; &lt;&lt; i &lt;&lt; &quot; ) : &quot; &lt;&lt; received &lt;&lt; std::endl;

for(size_t i(0), length(received.size()); i != length;
{
  int sended = send(clients[i], received.c_str()+i, static_cast&lt;int&gt;(length-i), 0);
  if(sended == SOCKET_ERROR)
  {
    std::cout &lt;&lt; &quot;FEHLER&quot; &lt;&lt; std::endl;
    return;
  }
  i += sended;
}
</code></pre>
<p>das empfangen beim client analog zum empfangen beim server...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1784301</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1784301</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Fri, 25 Sep 2009 17:54:52 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer[1024] leeren on Fri, 25 Sep 2009 18:09:53 GMT]]></title><description><![CDATA[<p>Vielen Dank für deine Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1784312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1784312</guid><dc:creator><![CDATA[Fendrich]]></dc:creator><pubDate>Fri, 25 Sep 2009 18:09:53 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer[1024] leeren on Fri, 25 Sep 2009 19:09:58 GMT]]></title><description><![CDATA[<p>Fendrich schrieb:</p>
<blockquote>
<p>Vielen Dank für deine Hilfe!</p>
</blockquote>
<p>ich hoffe, du hast es verstanden!? ^^<br />
falls nicht, trau dich ruhig, zu fragen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1784331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1784331</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Fri, 25 Sep 2009 19:09:58 GMT</pubDate></item></channel></rss>