如何使用boost asio进行多个udp连接?

时间:2016-10-26 09:25:06

标签: boost-asio

在我正在处理的应用程序中,数百个客户端将通过UDP连接到服务器。在客户端决定退出之前,套接字连接将保持为每个客户端打开。

我在http://www.boost.org/doc/libs/1_35_0/doc/html/boost_asio/tutorial/tutdaytime6/src.html下载了针对异步udp服务器的boost示例代码。

从代码中可以看出一些不清楚的事情:

  1. 由于每个连接都是从客户端进行的,我想保存传入客户端的IP。但是,从代码中可以看出,我可以把这个逻辑放在哪里。

  2. 看来此代码一次只能为一个客户端服务。在我的情况下,将有许多并发连接,并且每个连接必须保持套接字。如何扩展此代码?问候。

2 个答案:

答案 0 :(得分:1)

  

由于每个连接都是从客户端进行的,我想保存传入客户端的IP。但是,从代码中可以看出,这个逻辑并不明显。

此代码没有连接的概念。如果您正在编写知道连接是什么的代码,那么它将决定每个传入数据报是否是现有连接的一部分或建立新连接。那就是你要把这个逻辑放在哪里。

  

看起来这段代码一次只能为一个客户端服务。在我的情况下,将有许多并发连接,并且每个连接必须保持套接字。

您似乎认为UDP套接字与连接相关联。事实并非如此。 UDP对连接一无所知,这完全是代码的一个特性。由于UDP实现不知道这些连接,它只会为您提供它收到的所有数据报。每个连接都没有套接字,就像使用TCP等连接导向协议一样。

如果您需要连接并且出于某种原因仍希望使用UDP等无连接协议,则所有连接逻辑都是您的责任。你将有一个套接字,你将一次收到一个数据报,但可以维持任意数量的并发"连接"只要你编写代码来支持它。

答案 1 :(得分:0)

  1. 这是在remote_endpont_
  2. 中进行的
  3. 您需要转换代码,在io_service上添加多个线程调度,并确保在处理新数据包时,创建一个新的客户端处理程序实例来处理...