提升asio - udp服务器

Ghi*_*ita 3 c++ networking boost boost-asio

我在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));
Run Code Online (Sandbox Code Playgroud)

如何处理来自客户端的多个并发udp连接,因为如果我尝试使用创建另一个套接字

socket(ioService, boost::asio::ip::udp::endpoint(boost::asio::ip::udp::v4(), port))
Run Code Online (Sandbox Code Playgroud)

我得到绑定错误,因为我已经有一个绑定到同一端口的套接字.

编辑 我可以使用不同的服务器源端口向客户端发回响应,但即使我将响应发送回相同的客户端IP /客户端目标端口,它们也无法识别响应.

Mat*_*att 5

UDP是无连接传输,因此就UDP而言,连接的概念毫无意义.

如果要将数据发送回消息的发起者,则需要保留async_receive_from回调中返回的sender_endpoint的副本,并将其传回async_send_to.

这也假设客户端也在轮询/阅读并期待回复.它不需要监听与服务器相同的绑定端口(您不需要在客户端与UDP绑定).

我建议您阅读Beej的网络编程指南,以帮助您了解boost ASIO的内容.Boost ASIO让很多事情变得复杂恕我直言.

http://beej.us/guide/bgnet/output/html/singlepage/bgnet.html#sendtorecv

  • 您提供的链接已失效。 (2认同)