Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何指定在用c+编写的应用程序中使用的特定NIC+;(亚洲国际组织)_C++_Windows_Boost_Routing_Boost Asio - Fatal编程技术网

C++ 如何指定在用c+编写的应用程序中使用的特定NIC+;(亚洲国际组织)

C++ 如何指定在用c+编写的应用程序中使用的特定NIC+;(亚洲国际组织),c++,windows,boost,routing,boost-asio,C++,Windows,Boost,Routing,Boost Asio,我有一台机器连接到多个独立的网络,每个网络位于不同的NIC(网络接口卡)上。这台机器运行Windows 7 我在需要使用TCP通过特定NIC连接到特定IP的机器上运行应用程序。该应用程序使用c++11和boost asio(1.53.0)进行联网,并且可以更改源代码 在Windows环境中,有哪些不同的合理方法可以解决此问题(指定端点IP和NIC) 当前解决方案通过使用命令行“route”命令将相应的(块)IP分配给路由表中的右侧NIC,作为持久路由。这样,操作系统就可以处理问题,这是允许的,但

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

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

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

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

在连接之前,您应该将套接字连接到
端点。在本例中,我将它绑定到环回接口,在您的场景中,您可以绑定到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) );
}
#包括
int
main()
{
使用名称空间boost::asio;
io_服务ios;
ip::tcp::套接字套接字(ios);
open(ip::tcp::v4());
绑定(ip::tcp::endpoint(ip::address::from_string(“127.0.0.1”),0));
connect(ip::tcp::endpoint(ip::address::from_string(“127.0.0.1”),1234));
}

我不是Windows程序员,所以我不能提供比这个更详细的示例。我相信您可以使用枚举通过NIC接口。在Linux上我会使用。

所以绑定端点指定NIC,而连接端点是通常的目标端点,对吗?如果到目前为止这是正确的,那么我一直在讨论如何获取指定NIC的端点。@Peter是的,您是正确的,每个端点指定TCP套接字4元组的一部分:客户端IP、客户端端口、服务器IP、服务器端口。对于客户端端点,您应该使用该NIC的IP地址和零来选择临时端口。谢谢。因此,根据这里的附加信息:可以使用NIC的静态属性(如MAC)在配置中指定NIC。然后在运行时使用特定于操作系统的调用(如您提到的调用)获取具有指定MAC的NIC的IP,然后使用NIC IP将套接字绑定到NIC。