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

标签 c++ windows boost routing boost-asio

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

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

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

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

最佳答案

你应该open()bind()在连接之前将套接字连接到 endpoint。在此示例中,我将其绑定(bind)到环回接口(interface),在您的场景中,您可以绑定(bind)到 NIC 的接口(interface)。

#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 接口(interface)进行枚举.在 Linux 上我会使用 getifaddrs(3) .

关于c++ - 如何指定要在用 C++ 编写的应用程序中使用的特定 NIC (boost asio),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17299476/

相关文章:

c++ - 使用锁定文件作为多个进程之间的锁定的正确方法

c++ - 逻辑常数和物理常数

Windows Azure - 使用 WebRoles 时操作系统设置的持久性

c++ - Visual C++ 中的线程

c++ - BOOST 程序_选项 : parsing multiple argument list

c++ - 如何覆盖 qHash() 函数?

c++ - 这个 Getline 函数的 C++ 代码有什么问题?

c# - 从 C# 将文件上传到 Azure 文件时如何更改最大并发值?

c++ - 如何使用 ordered_non_unique 索引保留顺序?

c++ - 如何处理读入 ASIO streambuf 的额外字符?