【发布时间】:2012-08-28 08:03:33
【问题描述】:
我从 boost doc 中看到了官方的异步 udp 服务器示例。 在那里你创建一个 udp 套接字,将它绑定到本地端口并执行以下操作:
socket(ioService, boost::asio::ip::udp::endpoint(boost::asio::ip::udp::v4(), port))
socket.async_receive_from(buffer(data, max_length), senderEndpoint, boost::bind(&Request::HandleReceiveFrom, this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
如何处理来自客户端的多个并发 udp 连接,因为如果我尝试使用
创建另一个套接字socket(ioService, boost::asio::ip::udp::endpoint(boost::asio::ip::udp::v4(), port))
我收到绑定错误,因为我已经有一个绑定到同一个端口的套接字。
编辑 我可以使用不同的服务器源端口向客户端发回响应,但即使我将响应发送回相同的客户端 IP/客户端目标端口,它们也不会识别该响应。
【问题讨论】:
-
也许你应该重用现有的绑定。
-
@MarkGarcia 在创建的套接字上我还需要回复客户端。有多个客户端会在同一个套接字上接收数据。
-
UDP 没有任何连接。如果需要连接,则必须在 UDP 之上添加连接协议层,例如。每个对等点都有一个“连接”类,并为每个发送消息的新发件人创建一个新实例。
-
@MartinJames 我将我的服务器用作 dns 代理。我想处理多个客户,代理他们的请求,并给予答复。
-
如果我可以使用一些东西作为提升 asio tcp 接受器(这次是 UDP),我将能够为不同的客户端请求创建不同的 udp 套接字
标签: c++ networking boost boost-asio