c ++与特定客户端Boost asio

时间:2017-02-17 06:53:01

标签: c++ boost boost-asio

我是c ++的新手,我开始使用boost编写服务器代码。我在网络和官方文档上都有很多例子。但我没有发现任何事情(也许我没有问过这个好问题) - >与特定客户沟通。我的意思是 - >

旧问题:

  

服务器启动并等待连接 - >客户端(1)通过连接   TCP->服务器接受客户端并启动async_read

     

假设3个客户端也连接 - >

     

我如何告诉我的服务器太写客户端(2)或(3)但不是   既?

我表达自己很糟糕

新问题:

我的服务器工作正常,当客户端将数据发送到服务器(虚幻引擎4中的自定义客户端)时,他可以读取它然后写回我的客户端没有问题。我寻找一种方式与我想要的客户交谈而不需要他发送数据。例如:

客户端1写入服务器 - >数据发送到服务器启动下一个动作 - >写信给特定的客户。

更具体的例子:

客户端1想要向客户端10发送请求,因此客户端1向服务器写入动作“动作,id客户端”(请求,10),然后服务器知道他需要与客户端10通话并发送请求。

我的问题不是在客户端,而是在服务器端。

我确信这很简单,我只是不明白一些基本的东西,如果有人可以给我一个方向,一个例子或只是一个解释,我将不胜感激。感谢您将来的回答。

编辑:

如果有人像我一样有困难(我知道这很容易,但我们永远不会知道:p,也许它可以帮助某人)这里的答案。

我将其包含在我用来连接,写入,发送等的文件中

std::map<int, tcp::socket> playerRemote;

我设置了它 - &gt;

playerRemote.insert(std::pair<int, tcp::socket>(id, std::move(socket_)));

使用socket-&gt;

boost::asio::async_read(playerRemote.at(id_to_use)

问题解决!谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

每次你的服务器程序执行accept时,它都会在另一端有一个带有新客户端的新套接字。

通常的做法是使用这个新套接字创建和初始化某种对象。然后你把那个对象放到某种结构中。像集合,地图,矢量,列表,任何

当您需要特定客户端时,请搜索该数据结构。如果你使用了map或unordered_map,那么你可以通过你使用的任何键快速得到它。

现在您拥有了客户端对象,您可以在其上调用方法。就像你自己的版本&#34;发送&#34;可以将其添加到每个客户端缓冲区。由于消息发送在Boost ASIO中是异步的(它名称就在那里),你知道你可能无法立即发送它。

Boost ASIO聊天示例应用程序很好用。

查看量子物理学家在评论中提供的链接。特别是这一个:http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/example/cpp11/chat/chat_server.cpp