<?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 - boost::asio::ip::tcp::socket::read_some()]]></title><description><![CDATA[<p>Hallöle,<br />
ich schreibe Just4Fun einen TCP-Chat mit Boost::Asio. Genauer gesagt den Server. Die <em>boost::asio::write()</em>-Funktion hat wunderbar funktioniert, allerdings schmeisst er mir beim Aufruf von <em>boost::asio::ip::tcp::socket::read_some()</em> eine Exception und springt zu einer Stelle in der <em>xutility</em>. Ich möchte die besagte Stelle nun nicht posten... werde ich aber gerne tun wenn es euch hilft mir zu helfen <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="🙂"
    /> . Also, hier die mem fnc:</p>
<pre><code class="language-cpp">const std::pair&lt;const std::size_t,
				const boost::array&lt;std::string, 1024&gt;&gt; TCPSyncServer::GetMessageFromClient()
{
	boost::array&lt;std::string, 1024&gt; Message; // 1KB = max length of message
	boost::system::error_code ignored_error;

	const std::size_t length = m_pSocket-&gt;read_some(boost::asio::buffer(Message),
											        ignored_error);

	return std::pair&lt;const std::size_t,
					 const boost::array&lt;std::string, 1024&gt;&gt;::pair(length,
																  Message);
}
</code></pre>
<p>(Übrigens; Mit der Übergabe eines <em>std::string</em> an <em>boost::asio::buffer()</em> in <em>boost::asio::ip::tcp::socket::read_some()</em> ist so ziemlich alles explodiert^^, weswegen ich nun die Alternativlösung mit <em>boost::array</em> gewählt habe)<br />
Bevor ihr an Fehler in anderen Codesegmenten denkt: Der Server funktioniert einwandfrei, synchronisiert sich mit dem Clienten und schickt sogar Nachrichten an ihn. Nur diese mem fnc schiebt etwas Stress nach der Synchronisation.</p>
<p>Ich weiß nicht genau <strong>wann</strong> mein Chat-Client-Partner mir etwas geschickt hat, aber ich nehme an, dass er crasht wenn eine Nachricht auf dem Socket liegt, bzw. ich danach anfrage.</p>
<p>Zusatzinformation: Mein Gegenüber hat sich per <em>Telnet</em> mit mir synchronisiert und, wie ich denke, einfach wild in die Konsole getippt und Enter gedrückt. Falls es eine Möglichkeit gibt, mit Befehlen Nachrichten per <em>Telnet</em> zu verschicken, dann nennt mir bitte welche, denn ich habe <em><strong>nichts</strong></em> bei Google gefunden.</p>
<p>Ich danke vielmals im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/261185/boost-asio-boost-asio-ip-tcp-socket-read_some</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 13:27:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/261185.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 15 Feb 2010 01:55:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Boost::Asio - boost::asio::ip::tcp::socket::read_some() on Mon, 15 Feb 2010 01:55:01 GMT]]></title><description><![CDATA[<p>Hallöle,<br />
ich schreibe Just4Fun einen TCP-Chat mit Boost::Asio. Genauer gesagt den Server. Die <em>boost::asio::write()</em>-Funktion hat wunderbar funktioniert, allerdings schmeisst er mir beim Aufruf von <em>boost::asio::ip::tcp::socket::read_some()</em> eine Exception und springt zu einer Stelle in der <em>xutility</em>. Ich möchte die besagte Stelle nun nicht posten... werde ich aber gerne tun wenn es euch hilft mir zu helfen <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="🙂"
    /> . Also, hier die mem fnc:</p>
<pre><code class="language-cpp">const std::pair&lt;const std::size_t,
				const boost::array&lt;std::string, 1024&gt;&gt; TCPSyncServer::GetMessageFromClient()
{
	boost::array&lt;std::string, 1024&gt; Message; // 1KB = max length of message
	boost::system::error_code ignored_error;

	const std::size_t length = m_pSocket-&gt;read_some(boost::asio::buffer(Message),
											        ignored_error);

	return std::pair&lt;const std::size_t,
					 const boost::array&lt;std::string, 1024&gt;&gt;::pair(length,
																  Message);
}
</code></pre>
<p>(Übrigens; Mit der Übergabe eines <em>std::string</em> an <em>boost::asio::buffer()</em> in <em>boost::asio::ip::tcp::socket::read_some()</em> ist so ziemlich alles explodiert^^, weswegen ich nun die Alternativlösung mit <em>boost::array</em> gewählt habe)<br />
Bevor ihr an Fehler in anderen Codesegmenten denkt: Der Server funktioniert einwandfrei, synchronisiert sich mit dem Clienten und schickt sogar Nachrichten an ihn. Nur diese mem fnc schiebt etwas Stress nach der Synchronisation.</p>
<p>Ich weiß nicht genau <strong>wann</strong> mein Chat-Client-Partner mir etwas geschickt hat, aber ich nehme an, dass er crasht wenn eine Nachricht auf dem Socket liegt, bzw. ich danach anfrage.</p>
<p>Zusatzinformation: Mein Gegenüber hat sich per <em>Telnet</em> mit mir synchronisiert und, wie ich denke, einfach wild in die Konsole getippt und Enter gedrückt. Falls es eine Möglichkeit gibt, mit Befehlen Nachrichten per <em>Telnet</em> zu verschicken, dann nennt mir bitte welche, denn ich habe <em><strong>nichts</strong></em> bei Google gefunden.</p>
<p>Ich danke vielmals im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1855720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1855720</guid><dc:creator><![CDATA[Kóyaánasqatsi]]></dc:creator><pubDate>Mon, 15 Feb 2010 01:55:01 GMT</pubDate></item><item><title><![CDATA[Reply to Boost::Asio - boost::asio::ip::tcp::socket::read_some() on Mon, 15 Feb 2010 10:43:03 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">boost::array&lt;std::string, 1024&gt; message
boost::asio::buffer(message);
</code></pre>
<p>WTF? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
Und das kompiliert? Naja, wie auch immer, lies mal die Dokumentation:<br />
<a href="http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference/buffer.html" rel="nofollow">http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference/buffer.html</a></p>
<p>Zum Beispiel den ersten Satz:</p>
<blockquote>
<p>The <code>boost::asio::buffer</code> function is used to create a buffer object to represent raw memory, an array of POD elements, a vector of POD elements, or a <code>std::string</code> .</p>
</blockquote>
<p>Ich kann da nichts lesen von &quot;array of <code>std::string</code> &quot;.</p>
<p>Kóyaánasqatsi schrieb:</p>
<blockquote>
<p>(Übrigens; Mit der Übergabe eines std::string an boost::asio::buffer() in boost::asio::ip::tcp::socket::read_some() ist so ziemlich alles explodiert^^, weswegen ich nun die Alternativlösung mit boost::array gewählt habe)</p>
</blockquote>
<p>Wenn du die Dokumentation gelesen hättest (gleiche Seite), dann wüsstest du, dass man über <code>std::string</code> nur einen <code>const_buffer</code> bekommen kann, was aber beim Empfang nicht zulässig ist, da braucht es einen <code>mutable_buffer</code> .</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1855815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1855815</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 15 Feb 2010 10:43:03 GMT</pubDate></item><item><title><![CDATA[Reply to Boost::Asio - boost::asio::ip::tcp::socket::read_some() on Mon, 15 Feb 2010 13:37:31 GMT]]></title><description><![CDATA[<p>Oh ok. Danke schön erstmal! Ich habe die Methode nun noch einmal umgebaut und loope sie nachdem eine Verbindung besteht in einer extra <em>for()</em>-Schleife:</p>
<pre><code class="language-cpp">const std::pair&lt;const std::size_t,
				const std::vector&lt;char&gt;&gt; TCPSyncServer::GetMessageFromClient()
{
	std::vector&lt;char&gt; Message;
	boost::system::error_code ignored_error;

	const std::size_t length = m_pSocket-&gt;read_some(boost::asio::buffer(Message),
											        ignored_error);

	if(ignored_error)
		throw boost::system::system_error(ignored_error);

	return std::pair&lt;const std::size_t,
					 const std::vector&lt;char&gt;&gt;::pair(length,
													Message);
}
</code></pre>
<p>Zudem sollte gesagt sein, das ich ziemlich neu in der Thematik bin, also büdde nit so feste uffn Kopp hauen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Zu dem Problem: <em>length</em> ist <strong>immer</strong> 0! Warum? Was mache ich falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1855953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1855953</guid><dc:creator><![CDATA[Kóyaánasqatsi]]></dc:creator><pubDate>Mon, 15 Feb 2010 13:37:31 GMT</pubDate></item><item><title><![CDATA[Reply to Boost::Asio - boost::asio::ip::tcp::socket::read_some() on Mon, 15 Feb 2010 14:01:26 GMT]]></title><description><![CDATA[<p>Kóyaánasqatsi schrieb:</p>
<blockquote>
<p>Zudem sollte gesagt sein, das ich ziemlich neu in der Thematik bin, also büdde nit so feste uffn Kopp hauen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>Du solltest doch schon Erfahrung haben mit der Programmierung und das Lesen von Dokumentation &amp; Referenzen sollte ja wirklich das Einfachste sein <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>Kóyaánasqatsi schrieb:</p>
<blockquote>
<p>Zu dem Problem: <em>length</em> ist <strong>immer</strong> 0! Warum? Was mache ich falsch?</p>
</blockquote>
<p>Weil dein Puffer (namentlich <code>Message</code> ) eine Länge von 0 hat. Schau dir mal die Beispiele in der Dokumentation an. Du musst einen Puffer mit einer gewissen Grösser übergeben. Dieser wird dann entsprechend befüllt.</p>
<p>Wenn du willst, dass dein Puffer wächst mit dem Empfang und dabei bis zum Beispiel einem Zeilenende gelesen werden soll, dann musst du mit<a href="http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference/read_until.html" rel="nofollow"> <code>boost::asio::read_until</code> </a>und mit einem<a href="http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference/streambuf.html" rel="nofollow"> <code>boost::asio::streambuf</code> </a>arbeiten. Näheres dazu findest du in den <a href="http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/examples.html" rel="nofollow">Codebeispielen</a> von den HTTP Clients und Server und der Referenz zu den Funktionen.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1855967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1855967</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 15 Feb 2010 14:01:26 GMT</pubDate></item><item><title><![CDATA[Reply to Boost::Asio - boost::asio::ip::tcp::socket::read_some() on Mon, 15 Feb 2010 14:12:45 GMT]]></title><description><![CDATA[<p>Dravere ich will ein Kind von dir <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 />
Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1855973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1855973</guid><dc:creator><![CDATA[Kóyaánasqatsi]]></dc:creator><pubDate>Mon, 15 Feb 2010 14:12:45 GMT</pubDate></item><item><title><![CDATA[Reply to Boost::Asio - boost::asio::ip::tcp::socket::read_some() on Mon, 15 Feb 2010 14:21:59 GMT]]></title><description><![CDATA[<p>Kóyaánasqatsi schrieb:</p>
<blockquote>
<p>Dravere ich will ein Kind von dir <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="😃"
    /></p>
</blockquote>
<p>Das kostet aber was! Ich verkaufe gerne die störenden Nachbarskinder, aber diese zu entführen und verschicken kostet halt einiges. Zudem möchte ich ja auch einen Gewinn davon haben, abgesehen dass es dann endlich ruhiger wird ... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1855977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1855977</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 15 Feb 2010 14:21:59 GMT</pubDate></item><item><title><![CDATA[Reply to Boost::Asio - boost::asio::ip::tcp::socket::read_some() on Mon, 15 Feb 2010 16:25:01 GMT]]></title><description><![CDATA[<p>Bei read_until ist zu beachten, dass danach u.U. mehr Daten im übergebenen Puffer stehen, als zur Erfüllung der &quot;until&quot; Bedingung nötig wären.<br />
(Wurde so gemacht, weil eine Implementierung die nie mehr liest als nötig ist eine Performance-Katastrophe gewesen wäre)</p>
<p>Der zurückgegebene size_t gibt natürlich die Länge der kleinsten Sequenz an, die die Bedingung erfüllt.<br />
Wenn man immer mit read_until arbeitet, immer das selbe Puffer Objekt verwendet, und die &quot;konsumierten&quot; Daten vom Anfang des Puffers entfernt, dann funktioniert das auch ganz gut.</p>
<p>Da es etwas kontra-intuitiv ist, wollte ich es trotzdem erwähnen.</p>
<p>BTW: ein Thread auf der Boost-Mailing-Liste zu dem Thema:</p>
<p><a href="http://lists.boost.org/boost-users/2009/02/45275.php" rel="nofollow">http://lists.boost.org/boost-users/2009/02/45275.php</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856044</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856044</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 15 Feb 2010 16:25:01 GMT</pubDate></item></channel></rss>