如何指定一个特定的网卡用于用c ++编写的应用程序(boost asio)

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

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

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

当前的解决scheme通过使用命令行“route”命令将相应(块)的IP分配给路由表中的正确NIC – 作为永久路由。 这样的操作系统处理这个问题,这是允许的,但不是必需的。

在连接之前,您应该open()并将套接字bind()endpoint 。 在这个例子中,我把它绑定到了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)