如何在用c++编写的应用程序中指定要使用的特定NIC(boost asio)
How to specify a specific NIC to be used in an application written in c++ (boost asio)
我有一台机器连接到多个独立的网络,每个网络都在不同的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)
。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- boost::asio如何生成多个协同程序,然后加入它们
- 从 Boost ASIO 获取 epoll 描述符 io_service对象
- 如何在 Boost.Asio 中使用 Zero-copy sendmsg/receive
- C++ Boost::asio串行通信与Arduino无法写入
- 如何使用 Boost Asio 在 Android 上获取我的本地 udp IP 地址?
- boost::asio UDP 广播客户端仅接收"fast"数据包
- 执行时使用 boost::asio::d eadline_timer 时出错
- Boost.Asio/OpenSSL HTTPS GET certificate trouble
- C++ boost::asio::ip::tcp::acceptor 有时不接受连接器?
- boost::asio data owning `ConstBufferSequence`
- 如何替换此示例代码片段中已弃用的handler_type_t或 boost::asio::handler_type?
- 将 boost 序列化对象的 asio::streambuf 表示转换为 Beast 的 DynamicBody req.body()
- 如何将boost::asio::d eadline_timer 与Qt一起使用?
- 将更高的优先级设置为 boost::asio 线程处理进程
- Async_read_until限制读取的字节大小(Boost::asio)
- Boost Asio - boost::bind 导致程序崩溃
- 使用Asio(Boost)通过网络发送灵活的数据量