Pet*_*ter 5 c++ windows routing boost boost-asio
我有一台连接到多个独立网络的计算机,每个网络位于不同的NIC(网络接口卡)上.该机器运行Windows 7.
我在机器上运行一个应用程序,需要使用TCP通过特定的NIC连接到特定的IP.该应用程序使用c ++ 11和boost asio(1.53.0)进行联网,并且可以更改源.
在Windows环境中,有哪些不同的合理方法可以解决此问题(指定端点IP和NIC)?
当前解决方案将相应的(块)IP分配给路由表中的右侧NIC - 使用命令行"route"命令 - 作为持久路由.这样OS就可以处理问题,这是允许但不是必需的.
在连接之前,您应该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) );
}
Run Code Online (Sandbox Code Playgroud)
我不是 Windows 程序员,因此我无法提供比这更详细的示例。我相信您可以使用 来枚举 NIC 接口GetAdaptersAddresses。在 Linux 上我会使用getifaddrs(3).