我是c++的新手,我开始使用boost编写服务器代码。我在网上和官方文档中都遵循很多示例。但是我没有发现任何关于此的信息(也许我不问这个好问题)->与特定客户进行沟通。我的意思是->

旧问题:



我表现不好

新问题:

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

客户端1写入服务器->将数据发送到服务器,启动下一步操作->写入特定客户端。

更具体的例子:

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

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

我敢肯定这很容易,而且我只是不理解一些基本知识,如果有人可以为我提供指导,示例或简单的说明,我们将不胜感激。感谢您将来的回答。

编辑:

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

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

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

我设置它->
playerRemote.insert(std::pair<int, tcp::socket>(id, std::move(socket_)));

使用套接字->
boost::asio::async_read(playerRemote.at(id_to_use)

问题解决!感谢帮助!

最佳答案

每当您的服务器程序执行accept时,它就会在其另一端获得一个带有新客户端的新套接字。

通常的做法是使用此新套接字创建和初始化某种对象。然后将对象放入某种结构中。就像集合, map , vector ,列表一样,什么都可以。

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

现在有了客户端对象,您可以在其上调用方法了。就像您自己的“发送”版本一样,可以将其添加到每个客户端缓冲区中。由于消息发送在Boost ASIO中是异步的(名称中恰好在其中),您知道您可能无法立即发送消息。

Boost ASIO聊天示例应用程序与此有关。

看一下《量子物理学家》发表评论的链接。特别是这个:http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/example/cpp11/chat/chat_server.cpp

关于c++ - C++与特定客户端Boost Asio通信,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42291246/

10-11 22:48
查看更多