gpt4 book ai didi

c++ - Boost asio - udp 服务器

转载 作者:太空狗 更新时间:2023-10-29 20:15:41 29 4
gpt4 key购买 nike

我从 boost 文档中看到了官方的异步 udp 服务器示例。在那里你创建了一个 udp 套接字,将它绑定(bind)到一个本地端口并执行如下操作:

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))

我收到绑定(bind)错误,因为我已经有一个套接字绑定(bind)到同一个端口。

编辑我可以使用不同的服务器源端口向客户端发送回响应,但即使我将响应发送回相同的客户端 ip/客户端目标端口,他们也不会识别该响应。

最佳答案

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

如果您想将数据发送回消息的发起者,您需要保留 async_receive_from 回调中返回的 sender_endpoint 的拷贝,并将其传回 async_send_to。

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

我建议您阅读 Beej 的网络编程指南,以帮助您了解 boost ASIO 背后的原理。 Boost ASIO 使事情复杂化很多恕我直言。

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

关于c++ - Boost asio - udp 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12155086/

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