使用 boost asio udp 套接字时如何设置本地端点

Posted

技术标签:

【中文标题】使用 boost asio udp 套接字时如何设置本地端点【英文标题】:How to set local endpoint when using boost asio udp socket 【发布时间】:2011-07-13 13:45:52 【问题描述】:

我在 pc 上有 3 个网络接口,并且想确保当我进行 udp 套接字发送时,它通过特定的网络接口发送(我有发送数据时使用的 IP 地址)。

这里是代码。

udp::socket send_socket(io_service,boost::asio::ip::udp::v6());
udp::endpoint local_end_point(boost::asio::ip::address::from_string(LocalIpAddress),1111);
//  send_socket.bind(local_end_point);
send_socket.send_to(const_buffer,senderEndpoint,0,error);

上面的代码有效,但我无法控制数据将通过哪个网络接口发送。如果我取消注释 send_socket.bind 行,我将停止在另一端接收任何数据。

还有其他方法可以将套接字绑定到特定的网络接口吗?

【问题讨论】:

我们可以举一个实际设置端点的例子吗?例如。构造 ::endpoint 时的端口号是多少? 【参考方案1】:

bind() 函数将您的套接字绑定到特定的网络接口以进行发送和接收。如果您停止在另一端接收数据,可能是因为另一端无法通过您在 bind 调用中指定的 NIC 进行路由。

【讨论】:

嗨乍得,我正在使用链接本地 IP 地址。会不会是这个原因? 是的。如果您绑定到127.0.0.1,那么只有从127.0.0.1 接收的那个盒子上的应用程序才能获取数据。如果您需要允许外部机器连接,则需要绑定到您机器上的有效 NIC。

以上是关于使用 boost asio udp 套接字时如何设置本地端点的主要内容,如果未能解决你的问题,请参考以下文章

如何拆分接收到的 boost asio udp 套接字联合数据报

Boost.Asio UDP async_read_from 分段错误

使用 boost::asio 在同一主机上多播消息

如何确定是不是有数据可从 boost::asio 中的套接字读取?

如何在到达终止字符时返回 boost::asio::async_read

Boost::Asio 点对点 udp 聊天