<?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[boost::asio client sendet manchmal Misst und bleibt hängen]]></title><description><![CDATA[<p>Hi!<br />
Schreibe gerade an nem Client und nem Server mit boost::asio!<br />
Nachdem sich der Client verbunden hat, sendet er einen &quot;Authentification Key&quot; um sicherzustellen, dass der Client auch wirklich meiner ist und nicht irgend ein anders Programm.<br />
Jetzt hab ich das Problem, dass beim Server es vorkommt, dass beim Senden/Empfangen des Keys einfach nur Müll ankommt. Entweder es kommt nur totaler Schrott an (irgendwelche wirren Zeichen), oder es kommt der Key an sich zwar richtig an, aber angehängt hintendran auch noch lauter seltsame Zeichen. Woran kann das liegen? Hier mal der relevante Sourcecode:<br />
Server:</p>
<pre><code class="language-cpp">std::string server::GetMessage()
{
    std::string Buffer;
    boost::asio::async_read(m_socket,
                            boost::asio::buffer(Buffer),
                            boost::bind(&amp;client::message_handleshared_from_this(),
                            boost::asio::placeholders::error,
                            boost::asio::placeholders::bytes_transferred)
                           );
    return Buffer;
}
</code></pre>
<p>Client:</p>
<pre><code class="language-cpp">int client::SendMessage(std::string Message)
{
     boost::system::error_code error_c;

    boost::asio::write(socket,boost::asio::buffer(Message),boost::asio::transfer_all(),error_c);
    if(error_c == boost::asio::error::connection_aborted)//connection closed
    {
        std::cout &lt;&lt; &quot;Connection closed!&quot; &lt;&lt; std::endl;
        return 2;
    }
    return 0;
}
</code></pre>
<p>Dann habe ich noch ein weiteres wirklich seltsames Problem, das ich mir nicht erklären kann. Er tritt anscheinend beim Verbinden zum Server auf<br />
Hier mal der Code:</p>
<pre><code class="language-cpp">void Connect(std::string IP, std::string Port)
{
    tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);//resolve the hostname/ip
    tcp::resolver::iterator end;

    boost::system::error_code error_c = boost::asio::error::host_not_found;
    std::cout &lt;&lt; &quot;Connecting to &quot; &lt;&lt; IP &lt;&lt; &quot;...&quot;;

    while (error_c &amp;&amp; endpoint_iterator != end)//connect
    {
        socket.close();
        socket.connect(*endpoint_iterator++, error_c);
    }
    if (error_c)//if error::host_not_found
    {
        std::cout &lt;&lt; &quot;Coulnd't find the Host!&quot; &lt;&lt; std::endl;
        return 1;//error 1
    }
    std::cout &lt;&lt; &quot;connected!&quot; &lt;&lt; std::endl;//DAS HIER ZEIGT ES AN
    std::cout &lt;&lt; &quot;Authentificating...&quot;; //DAS HIER ZEIGT ES NICHT AN
    //...
}
</code></pre>
<p>Es geht um die letzten beiden 'std::cout'...das erste &quot;connected!&quot; zeigt es mir noch ganz normal an. &quot;Authentificating...&quot; zeigt es dann einfach nicht mehr an. Allerdings hängt sich das Programm nicht wirklich auf. Bei '//...' geht es weiter mit dem Code zum schicken des AuthentificationKeys und mehr empfangen/senden und es funktioniert alles einwandfrei. Nur zeigt es mir kein einziges std::cout mehr an ab dem Zeitpunkt. Wenn ich zwischen die 2 std::couts oben allerdings einen boost::asio::deadline_timer packe:</p>
<pre><code class="language-cpp">std::cout &lt;&lt; &quot;connected!&quot; &lt;&lt; std::endl;//das zeigt es an
deadline_timer.wait();
std::cout &lt;&lt; &quot;Authentificating...&quot;;//das zeigt es mir jetzt auch an!
</code></pre>
<p>, dann funktioniert das 2. std::cout...allerdings alle folgenden std::couts auch nicht mehr.<br />
Des weiteren hab ich das hier getestet:</p>
<pre><code class="language-cpp">std::cout &lt;&lt; &quot;connected!&quot; &lt;&lt; std::endl;//das zeigt es an
std::cerr &lt;&lt; &quot;Authentificating...&quot;;//funktioniert jetzt auch
</code></pre>
<p>...<br />
Das funktioniert zwar, aber danach zeigt es mir wiederum kein einziges std::cout oder std::cerr mehr an! <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=":-/"
      alt="😕"
    /> Das ist einer der seltsamsten Fehler die ich in über 2 Jahren programmieren jetzt hatte <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 />
Hoffe mir kann jemand bei den beiden Problemen helfen <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="😉"
    /><br />
Gruß,<br />
Finn <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/topic/280224/boost-asio-client-sendet-manchmal-misst-und-bleibt-hängen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 05:06:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/280224.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 11 Jan 2011 18:54:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to boost::asio client sendet manchmal Misst und bleibt hängen on Tue, 11 Jan 2011 18:54:46 GMT]]></title><description><![CDATA[<p>Hi!<br />
Schreibe gerade an nem Client und nem Server mit boost::asio!<br />
Nachdem sich der Client verbunden hat, sendet er einen &quot;Authentification Key&quot; um sicherzustellen, dass der Client auch wirklich meiner ist und nicht irgend ein anders Programm.<br />
Jetzt hab ich das Problem, dass beim Server es vorkommt, dass beim Senden/Empfangen des Keys einfach nur Müll ankommt. Entweder es kommt nur totaler Schrott an (irgendwelche wirren Zeichen), oder es kommt der Key an sich zwar richtig an, aber angehängt hintendran auch noch lauter seltsame Zeichen. Woran kann das liegen? Hier mal der relevante Sourcecode:<br />
Server:</p>
<pre><code class="language-cpp">std::string server::GetMessage()
{
    std::string Buffer;
    boost::asio::async_read(m_socket,
                            boost::asio::buffer(Buffer),
                            boost::bind(&amp;client::message_handleshared_from_this(),
                            boost::asio::placeholders::error,
                            boost::asio::placeholders::bytes_transferred)
                           );
    return Buffer;
}
</code></pre>
<p>Client:</p>
<pre><code class="language-cpp">int client::SendMessage(std::string Message)
{
     boost::system::error_code error_c;

    boost::asio::write(socket,boost::asio::buffer(Message),boost::asio::transfer_all(),error_c);
    if(error_c == boost::asio::error::connection_aborted)//connection closed
    {
        std::cout &lt;&lt; &quot;Connection closed!&quot; &lt;&lt; std::endl;
        return 2;
    }
    return 0;
}
</code></pre>
<p>Dann habe ich noch ein weiteres wirklich seltsames Problem, das ich mir nicht erklären kann. Er tritt anscheinend beim Verbinden zum Server auf<br />
Hier mal der Code:</p>
<pre><code class="language-cpp">void Connect(std::string IP, std::string Port)
{
    tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);//resolve the hostname/ip
    tcp::resolver::iterator end;

    boost::system::error_code error_c = boost::asio::error::host_not_found;
    std::cout &lt;&lt; &quot;Connecting to &quot; &lt;&lt; IP &lt;&lt; &quot;...&quot;;

    while (error_c &amp;&amp; endpoint_iterator != end)//connect
    {
        socket.close();
        socket.connect(*endpoint_iterator++, error_c);
    }
    if (error_c)//if error::host_not_found
    {
        std::cout &lt;&lt; &quot;Coulnd't find the Host!&quot; &lt;&lt; std::endl;
        return 1;//error 1
    }
    std::cout &lt;&lt; &quot;connected!&quot; &lt;&lt; std::endl;//DAS HIER ZEIGT ES AN
    std::cout &lt;&lt; &quot;Authentificating...&quot;; //DAS HIER ZEIGT ES NICHT AN
    //...
}
</code></pre>
<p>Es geht um die letzten beiden 'std::cout'...das erste &quot;connected!&quot; zeigt es mir noch ganz normal an. &quot;Authentificating...&quot; zeigt es dann einfach nicht mehr an. Allerdings hängt sich das Programm nicht wirklich auf. Bei '//...' geht es weiter mit dem Code zum schicken des AuthentificationKeys und mehr empfangen/senden und es funktioniert alles einwandfrei. Nur zeigt es mir kein einziges std::cout mehr an ab dem Zeitpunkt. Wenn ich zwischen die 2 std::couts oben allerdings einen boost::asio::deadline_timer packe:</p>
<pre><code class="language-cpp">std::cout &lt;&lt; &quot;connected!&quot; &lt;&lt; std::endl;//das zeigt es an
deadline_timer.wait();
std::cout &lt;&lt; &quot;Authentificating...&quot;;//das zeigt es mir jetzt auch an!
</code></pre>
<p>, dann funktioniert das 2. std::cout...allerdings alle folgenden std::couts auch nicht mehr.<br />
Des weiteren hab ich das hier getestet:</p>
<pre><code class="language-cpp">std::cout &lt;&lt; &quot;connected!&quot; &lt;&lt; std::endl;//das zeigt es an
std::cerr &lt;&lt; &quot;Authentificating...&quot;;//funktioniert jetzt auch
</code></pre>
<p>...<br />
Das funktioniert zwar, aber danach zeigt es mir wiederum kein einziges std::cout oder std::cerr mehr an! <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=":-/"
      alt="😕"
    /> Das ist einer der seltsamsten Fehler die ich in über 2 Jahren programmieren jetzt hatte <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 />
Hoffe mir kann jemand bei den beiden Problemen helfen <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="😉"
    /><br />
Gruß,<br />
Finn <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/2005375</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2005375</guid><dc:creator><![CDATA[Finn]]></dc:creator><pubDate>Tue, 11 Jan 2011 18:54:46 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio client sendet manchmal Misst und bleibt hängen on Tue, 11 Jan 2011 19:34:41 GMT]]></title><description><![CDATA[<p>Zu deinem 2. Problem.</p>
<p>Du mußt den std::cout flushen</p>
<pre><code class="language-cpp">std::cout.flush();
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">std::cout &lt;&lt; std::endl
</code></pre>
<p>flushed ihn ebenfalls (+Zeilenumbruch).</p>
<p>Gruß,<br />
XSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2005413</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2005413</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Tue, 11 Jan 2011 19:34:41 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio client sendet manchmal Misst und bleibt hängen on Tue, 11 Jan 2011 21:34:02 GMT]]></title><description><![CDATA[<p>Wo genau muss ich das denn machen? Habs direkt nach dem std::cout mit &quot;connected!&quot; versucht. Geht immer noch nicht <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=":-/"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2005461</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2005461</guid><dc:creator><![CDATA[Finn]]></dc:creator><pubDate>Tue, 11 Jan 2011 21:34:02 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio client sendet manchmal Misst und bleibt hängen on Wed, 12 Jan 2011 07:06:12 GMT]]></title><description><![CDATA[<p>Finn schrieb:</p>
<blockquote>
<p>Wo genau muss ich das denn machen? Habs direkt nach dem std::cout mit &quot;connected!&quot; versucht. Geht immer noch nicht <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=":-/"
      alt="😕"
    /></p>
</blockquote>
<p>Jedes mal wenn du etwas in std::cout schreibst, kann es potentiell gecached<br />
werden.</p>
<p>Ich dachte an:</p>
<pre><code class="language-cpp">std::cout &lt;&lt; &quot;Authentificating...&quot; &lt;&lt; std::endl;
</code></pre>
<p>bzw.</p>
<pre><code class="language-cpp">std::cout &lt;&lt; &quot;Authentificating...&quot;;
std::cout.flush();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2005515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2005515</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Wed, 12 Jan 2011 07:06:12 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio client sendet manchmal Misst und bleibt hängen on Wed, 12 Jan 2011 12:04:52 GMT]]></title><description><![CDATA[<p>Das hier:</p>
<pre><code class="language-cpp">std::string server::GetMessage()
{
    std::string Buffer;
    boost::asio::async_read(m_socket,
                            boost::asio::buffer(Buffer),
                            boost::bind(&amp;client::message_handleshared_from_this(),
                            boost::asio::placeholders::error,
                            boost::asio::placeholders::bytes_transferred)
                           );
    return Buffer;
}
</code></pre>
<p>geht so schon mal nicht. <code>async_read</code> kommt sofort nach dessen Aufruf zurück.</p>
<p>Das Empfangen der Daten und der Aufruf des Empfangdshandlers, wird im asio-Framework abgehandelt. Das bedeutet aber auch, dass das zum Puffern benutzte Objekt gültig bleiben muss, bis der übergebene Handler aufgerufen wird. Bei Deiner Funktion ist das nicht der Fall:<br />
Du legst lokal ein String an, rufst damit <code>async_read</code> auf, das kommt dann sofrt zurück, und dann ist Deine Funktion zu Ende, und das String-Objekt wird zerstört. <code>async_read</code> arbeitet danach auf Speicher, welcher Dir nicht mehr gehört -&gt; Undefined Beahviour.</p>
<p>Das nächste Problem ist, dass Du für den Empfang einen Puffer in einer bestimmten Größe vorhalten musst. <code>asio</code> passt die Puffergröße <em>nicht</em> automatisch an.</p>
<p>Wenn Du Telegramme unterschiedlicher Länge empfangen willst, musst Du die Länge erst in einem Telegramm übertragen, dann damit den Empfangspuffer anpassen, und dann, in einem zweiten Telegramm, die eigentlichen Daten senden.</p>
<p>Ein <code>std::string</code> ist als Empfangspuffer ungeeignet. Ein <code>std::vector&lt;char&gt;</code> ist besser.<br />
Mich wundert ganz ehrlich, dass das Programm überhaupt etwas empfängt. Ich hätte eher einen Absturz erwartet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2005661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2005661</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 12 Jan 2011 12:04:52 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio client sendet manchmal Misst und bleibt hängen on Wed, 12 Jan 2011 12:13:04 GMT]]></title><description><![CDATA[<p>Ah danke Tachyoin <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="😃"
    /> Klingt logisch! Werd ich mal überarbeiten <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/2005674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2005674</guid><dc:creator><![CDATA[Finn]]></dc:creator><pubDate>Wed, 12 Jan 2011 12:13:04 GMT</pubDate></item></channel></rss>