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

How to specify a specific NIC to be used in an application written in c++ (boost asio)

本文关键字:asio boost NIC c++ 应用程序      更新时间:2023-10-16

我有一台机器连接到多个独立的网络,每个网络都在不同的NIC(网络接口卡)上。这台机器运行Windows 7。

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

在Windows环境中,有什么不同的合理方法来解决这个问题(指定端点IP和NIC)?

当前的解决方案通过使用命令行"route"命令,将各个(块)IP分配给路由表中的正确NIC,作为持久路由。这样操作系统就可以处理问题,这是允许的,但不是必需的。

在连接之前,您应该将套接字open()bind()连接到endpoint。在这个例子中,我将它绑定到环回接口,在您的场景中,您可以绑定到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)