<?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::udp mehrere clients]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe ein paar Fragen zu boost::asio (im Speziellen die Verwendung von UDP):</p>
<p>1.Wenn ich mehrere boost::asio::udp::socket.async_send_to aufrufe mache, wird dann bei io_service.run() / io_service.poll()<br />
auch mehrfach der completion-handler aufgerufen, oder nur einmal, undzwar sobald beide operationen fertig sind?</p>
<p>2. Wie setzt man am besten die kommunikation mit mehreren clients um?</p>
<p>Beim async_receive_from kann man ein endpoint übergeben, in den so wie ich das verstanden habe dann nach dem empfangen informationen über den sender drinstehen.</p>
<p>Ist es dann sinnvoll, eine std::map&lt;boost::asio::udp::endpoint, Player&gt; zu haben und nach jedem empfangen damit zuzuordnen, oder gibt es da bessere möglichkeiten?</p>
<p>3. Erstmal keine wirklich konkrete Frage, weil ich mich damit noch nicht so stark beschäftigt habe:<br />
Ist es sinnvoll multicast zu verwenden und wie funktioniert das?<br />
Was das allgemein ist werd ich mal auf wiki&amp;co nachlesen.<br />
Zur Verwendung mit boost::asio habe ich dazu bisher nur ein Beispiel auf der boost::asio seite gefunden, aber keinen guten erklärenden text, sodass ich die verwendung noch nicht wirklich verstanden habe.<br />
Wichtiger sind aber 1 und 2.</p>
<p>Ich hoffe ihr könnt mir helfen!<br />
Vielen Dank schonmal für eure Antworten.</p>
<p>P.S.: Ich hab das in das Forum hier geschrieben und nicht in Webzeugs, weil in der Kategorie stand, dass boost hier reingehört.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/288691/boost-asio-udp-mehrere-clients</link><generator>RSS for Node</generator><lastBuildDate>Wed, 19 Aug 2026 18:24:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/288691.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 21 Jun 2011 10:17:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to boost::asio::udp mehrere clients on Tue, 21 Jun 2011 10:17:43 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe ein paar Fragen zu boost::asio (im Speziellen die Verwendung von UDP):</p>
<p>1.Wenn ich mehrere boost::asio::udp::socket.async_send_to aufrufe mache, wird dann bei io_service.run() / io_service.poll()<br />
auch mehrfach der completion-handler aufgerufen, oder nur einmal, undzwar sobald beide operationen fertig sind?</p>
<p>2. Wie setzt man am besten die kommunikation mit mehreren clients um?</p>
<p>Beim async_receive_from kann man ein endpoint übergeben, in den so wie ich das verstanden habe dann nach dem empfangen informationen über den sender drinstehen.</p>
<p>Ist es dann sinnvoll, eine std::map&lt;boost::asio::udp::endpoint, Player&gt; zu haben und nach jedem empfangen damit zuzuordnen, oder gibt es da bessere möglichkeiten?</p>
<p>3. Erstmal keine wirklich konkrete Frage, weil ich mich damit noch nicht so stark beschäftigt habe:<br />
Ist es sinnvoll multicast zu verwenden und wie funktioniert das?<br />
Was das allgemein ist werd ich mal auf wiki&amp;co nachlesen.<br />
Zur Verwendung mit boost::asio habe ich dazu bisher nur ein Beispiel auf der boost::asio seite gefunden, aber keinen guten erklärenden text, sodass ich die verwendung noch nicht wirklich verstanden habe.<br />
Wichtiger sind aber 1 und 2.</p>
<p>Ich hoffe ihr könnt mir helfen!<br />
Vielen Dank schonmal für eure Antworten.</p>
<p>P.S.: Ich hab das in das Forum hier geschrieben und nicht in Webzeugs, weil in der Kategorie stand, dass boost hier reingehört.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2081543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081543</guid><dc:creator><![CDATA[Gast1337]]></dc:creator><pubDate>Tue, 21 Jun 2011 10:17:43 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::udp mehrere clients on Tue, 21 Jun 2011 11:19:02 GMT]]></title><description><![CDATA[<blockquote>
<p>1.Wenn ich mehrere boost::asio::udp::socket.async_send_to aufrufe mache, wird dann bei io_service.run() / io_service.poll()<br />
auch mehrfach der completion-handler aufgerufen, oder nur einmal, undzwar sobald beide operationen fertig sind?</p>
</blockquote>
<p>Pro async_** Aufruf wird ein Completion Handler aufgerufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2081567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081567</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Tue, 21 Jun 2011 11:19:02 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::udp mehrere clients on Tue, 21 Jun 2011 20:52:37 GMT]]></title><description><![CDATA[<p>Danke!<br />
Das vereinfacht schonmal einiges.<br />
Ich hab jetzt erstmal auf multicast verzichtet.<br />
Zur Behandlung von mehreren clients habe ich gerade das hier geschrieben (noch nicht getestet):</p>
<pre><code class="language-cpp">//in der game klasse:
typedef std::map&lt;boost::asio::ip::udp::endpoint, Player*&gt; PlayerMap;
PlayerMap myPlayerMap;
boost::asio::ip::udp::endpoint myRemoteEndpoint;
boost::array&lt;char, 3000&gt; myReadBuffer;
...

void Game::onReadFinished(const boost::system::error_code&amp; ec,
    std::size_t bytesTransferred)
{
	if (ec)
	{
		cerr &lt;&lt; &quot;error code &quot; &lt;&lt; ec.value() &lt;&lt;&quot;: &quot; &lt;&lt; ec.message() &lt;&lt; endl;
		//throw boost::system::system_error(ec);
	}
	sf::Packet packet;
	packet.Append(myReadBuffer.data(), bytesTransferred);
	if(myIsServer)
	{
		Player * client = 0;
		PlayerMap::iterator itr = myPlayerMap.find(myRemoteEndpoint);
		if(itr == myPlayerMap.end())
		{
			cout &lt;&lt; &quot;a new player joined!&quot; &lt;&lt; std::endl;
			myPlayers.push_back(Player(-1, -1, 0.2f, 0.2f, 0.35f, 0.35f));
			myPlayerMap[myRemoteEndpoint] = &amp; myPlayers.back();
			client = &amp; myPlayers.back();
		}
		else
		{
			client = itr-&gt;second;
		}
		onReceivedClientInput(packet, *client);
	}
	else
	{
		onReceivedGameState(packet);
	}
	mySocket-&gt;async_receive_from(buffer(myReadBuffer), myRemoteEndpoint, 0, boost::bind(&amp;Game::onReadFinished,
		 this, boost::asio::placeholders::error,
	     boost::asio::placeholders::bytes_transferred));
}
</code></pre>
<p>Geht das vll noch besser/einfacher?<br />
Oder hat sonst noch jemand Vorschläge?<br />
Ich werd mich nochmal melden, wenn ichs getestet hab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2081891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081891</guid><dc:creator><![CDATA[Gast1337]]></dc:creator><pubDate>Tue, 21 Jun 2011 20:52:37 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::udp mehrere clients on Tue, 21 Jun 2011 20:54:08 GMT]]></title><description><![CDATA[<p>Mir fällt gerade auf, dass ich adressen von elementen des vektors benutze, was afaik sehr böse ist, ich muss den vektor dann wohl auf pointer auf player umstellen, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2081892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081892</guid><dc:creator><![CDATA[Gast1337]]></dc:creator><pubDate>Tue, 21 Jun 2011 20:54:08 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::udp mehrere clients on Tue, 21 Jun 2011 22:30:28 GMT]]></title><description><![CDATA[<p>Gast1337 schrieb:</p>
<blockquote>
<p>Mir fällt gerade auf, dass ich adressen von elementen des vektors benutze, was afaik sehr böse ist, ich muss den vektor dann wohl auf pointer auf player umstellen, oder?</p>
</blockquote>
<p>Ja, auch boost::ptr_vector bietet sich evtl an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2081916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081916</guid><dc:creator><![CDATA[fdfdg]]></dc:creator><pubDate>Tue, 21 Jun 2011 22:30:28 GMT</pubDate></item></channel></rss>