gpt4 book ai didi

c++ 与特定客户端 Boost asio 通信

转载 作者:行者123 更新时间:2023-11-30 05:17:05 25 4
gpt4 key购买 nike

我是 C++ 的新手,我开始用 boost 编写我的服务器代码。我在网络和官方文档上遵循了很多示例。但我对此一无所知(也许我没有问好问题)-> 与特定客户沟通。我的意思是->

老问题:

Server launch and wait for connection-> client(1) connect through TCP-> server accept client and start async_read

Let's say 3 clients also connect->

How I'll tell to my server too write too client(2) or (3) but not both?

我表达不好

新问题:

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

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

更具体的例子:

客户端 1 想向客户端 10 发送请求,因此客户端 1 向服务器写入操作 «action, id client» (request, 10) 然后服务器知道他需要与客户端 10 交谈并发送请求。

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

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

编辑:

如果有人像我一样遇到困难(我知道这很容易,但我们永远不知道 :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)

问题解决!感谢您的帮助!

最佳答案

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

通常的做法是使用这个新套接字创建并初始化某种对象。然后你将该对象放入某种结构中。像集合、 map 、 vector 、列表,任何东西

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

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

Boost ASIO 聊天示例应用程序在这方面做得很好。

查看 The Quantum Physicist 在评论中放置的链接。特别是这个:http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/example/cpp11/chat/chat_server.cpp

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com