6

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

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

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

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

4

1 回答 1

4

在连接之前,您应该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. 在 Linux 上,我会使用getifaddrs(3).

于 2013-06-25T16:20:02.190 回答