gpt4 book ai didi

c++ - 绑定(bind)和连接的 Boost.Asio 数据报 (UDP) 套接字

转载 作者:搜寻专家 更新时间:2023-10-31 01:43:13 25 4
gpt4 key购买 nike

我在理解 Boost.Asio 背后的概念时遇到问题(使用 v1.49.0)boost::asio::ip::udp::socket socket 。

首先我要解释一下我想要实现的目标:

  • 我将 Boost.Asio 套接字隐藏在一个非常简单的接口(interface)(纯抽象基类)后面,所以我有两个包装类,它们允许访问流套接字或数据报套接字。<
  • 我想在将 Boost.Asio 套接字传递到我的包装类的构造函数之前配置本地端点远程端点。
  • 我想使用socket.receive(或者boost::asio::read)和socket.send(或者boost::asio::write) 成员函数,而不是 socket.receive_fromsocket.send_to 成员函数。
  • 使用 socket.sendsocket.receive 的唯一方法 boost::asio::ip::udp::socket似乎连接了 socket 。

UDP套接字既可以绑定(bind)也可以连接:

问题是,即使我能够

  1. 打开 socket ,
  2. 设置套接字选项,
  3. 绑定(bind)套接字,
  4. 连接 socket ,

为了能够通过套接字发送数据,我无法从套接字接收数据。如果我不连接套接字,我可以通过绑定(bind)的本地端点接收数据,但我无法使用描述的方法发送数据。

  1. 所以我的核心问题是:我是否在尝试一些不可能实现的事情?
  2. 我能否只对一个套接字实例使用bind connect
  3. 如果前两个问题的答案是否定的:我必须做什么才能通过绑定(bind)和连接的 Boost.Asio UDP 套接字接收和发送数据。

我知道 UDP 实际上是无连接的,因此本文使用了 Boost.Asio 术语。我也读过connect on "connection less" boost::asio::ip::udp::socket这似乎表明我正在尝试的是不可能的。

最佳答案

connect 的手册页中缺少一点:

If the socket sockfd is of type SOCK_DGRAM, then addr is the address to which datagrams are sent by default, and the only address from which datagrams are received.

这意味着,如果你想连接套接字,那么它将只能从远程端点(连接的端点)接收数据报,即对等方必须在发送之前绑定(bind)自己的套接字数据报到您的套接字等待数据。

如果您需要从多个点接收数据,您可以将 udp 套接字连接到“任何”地址(即 0.0.0.0 - udp::v4())和某个端口。

关于c++ - 绑定(bind)和连接的 Boost.Asio 数据报 (UDP) 套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25566519/

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