加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何指定在用c编写的应用程序中使用的特定NIC(boost asio)

发布时间:2020-12-16 05:04:13 所属栏目:百科 来源:网络整理
导读:我有一台连接到多个独立网络的计算机,每个网络位于不同的NIC(网络接口卡)上.该机器运行 Windows 7. 我在机器上运行一个应用程序,需要使用TCP通过特定的NIC连接到特定的IP.该应用程序使用c 11和boost asio(1.53.0)进行联网,并且可以更改源. 在Windows环境中,
我有一台连接到多个独立网络的计算机,每个网络位于不同的NIC(网络接口卡)上.该机器运行 Windows 7.

我在机器上运行一个应用程序,需要使用TCP通过特定的NIC连接到特定的IP.该应用程序使用c 11和boost asio(1.53.0)进行联网,并且可以更改源.

在Windows环境中,有哪些不同的合理方法可以解决此问题(指定端点IP和NIC)?

当前解决方案将相应的(块)IP分配给路由表中的右侧NIC – 使用命令行“route”命令 – 作为持久路由.这样OS就可以处理问题,这是允许但不是必需的.

解决方法

在连接之前,应将 open()bind()套接字连接到端点.在此示例中,我将其绑定到loopback接口,在您的方案中,您可以绑定到NIC的接口.
#include <boost/asio.hpp>

int
main()
{
    using namespace boost::asio;
    io_service ios;
    ip::tcp::socket sock( ios );
    sock.open( ip::tcp::v4() );
    sock.bind( ip::tcp::endpoint(ip::address::from_string("127.0.0.1"),0) );
    sock.connect( ip::tcp::endpoint(ip::address::from_string("127.0.0.1"),1234) );
}

我不是Windows程序员,所以我不能提供比这更详细的例子.我相信你可以使用GetAdaptersAddresses通过NIC接口进行枚举.在Linux上我会使用getifaddrs(3).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读