C++ Boost-ASIO-TCP服务器体系结构

C++ Boost-ASIO-TCP服务器体系结构,c++,boost,network-programming,boost-asio,C++,Boost,Network Programming,Boost Asio,我不熟悉boost和asio(但不熟悉网络编程),我目前正在尝试创建一个可接受多个客户端的TCP服务器。 带有客户端的服务器的主要功能很简单: 1-读取具有固定大小的标题 2-解释请求的类型,阅读数据包的其余部分 3-处理所有数据的请求 4-返回到步骤1 这适用于基本请求,如:检查凭据、启用FTP协议等。。。 但有一个问题: 一个请求要求通过服务器与另一个连接的客户端通信。 但是,如果我遵循给定的Boost Asio体系结构 还是那个在 我实际上没有访问其他客户端套接字的权限,它们没有库存,它们

我不熟悉boost和asio(但不熟悉网络编程),我目前正在尝试创建一个可接受多个客户端的TCP服务器。 带有客户端的服务器的主要功能很简单:

1-读取具有固定大小的标题

2-解释请求的类型,阅读数据包的其余部分

3-处理所有数据的请求

4-返回到步骤1

这适用于基本请求,如:检查凭据、启用FTP协议等。。。 但有一个问题: 一个请求要求通过服务器与另一个连接的客户端通信。 但是,如果我遵循给定的Boost Asio体系结构

还是那个在

我实际上没有访问其他客户端套接字的权限,它们没有库存,它们的生存多亏了智能指针的行为

我确实有一个解决这个问题的方法,它是将连接的套接字保存在列表中,并与每个连接的套接字共享,这样客户机每次都可以访问其他客户机套接字。 但我真的认为这不是一个好的建筑,它可以更好


有任何已知的方法可以解决此问题吗?

以下是一个很好的方法:

  • 服务器为所有连接的客户端保留套接字列表
  • 每个客户端都会收到一个ID(字符串或int),可以通过网络轻松发送
  • ID为“1”的客户端向服务器发送ID为“2”的客户端的消息
  • 服务器从“1”接收消息,并使用存储的套接字发送到“2”

这样,只有服务器保留套接字。所有客户端都使用ID来相互识别。

这更多的是设计问题,而不是代码问题。由于设计要求包括客户机相互通信的能力,我建议您设计“客户机”结构,以便能够处理某种“向该客户机发送消息”功能。要向所有客户机广播,那么您在实现中需要做的就是迭代所有客户机,并使用每个客户机的“发送消息”。对于非广播消息,您需要某种方法来唯一地标识每个客户机。因此,为了实现这一点,我必须将所有客户机存储在一个容器中并将其提供给他们?这是正确的吗?这是一个良好的开端,在实施方面。这是我首先想到的,但我不确定这是一个好的做法还是一个解决问题的简单方法。那我就这么做。