2011-07-13 36 views
4

我有3个网络接口在PC上,并希望确保当我做udp套接字发送,它通过特定的网络接口发送(我有ip地址使用时发送数据)。如何设置本地端点时使用升压asio udp套接字

这是代码。

udp::socket send_socket(io_service,boost::asio::ip::udp::v6()); 
udp::endpoint local_end_point(boost::asio::ip::address::from_string(LocalIpAddress),1111); 
// send_socket.bind(local_end_point); 
send_socket.send_to(const_buffer,senderEndpoint,0,error); 

上面的代码工作,但我不能控制数据将通过什么网络接口发送。如果我取消send_socket.bind行的注释,我将停止接收另一端的任何数据。

是否有任何其他方式将套接字绑定到特定的网络接口?

+0

我们可以举一个实际设置端点的例子吗?例如。构建:: endpoint时端口号是什么? – 2013-02-12 04:35:04

回答

4

bind()函数将您的套接字绑定到特定的网络接口以发送和接收数据。如果您在另一端停止接收数据,很可能是因为另一端无法通过bind调用中指定的NIC进行路由。

+0

嗨乍得,我使用链接本地IP地址。这可能是原因吗? – dev

+0

是的。如果你绑定到'127.0.0.1',那么只有从127.0.0.1接收的那个应用程序才能获得数据。如果您需要允许外部机器连接,则需要绑定到机器上的有效NIC。 – Chad