如何获取sendto功能使用的IP?

时间:2013-04-24 02:22:56

标签: sockets winapi ip

当发件人有多个网卡时,此功能sendto选择随机ip发送数据包 那么获取sendto使用的IP地址? 代码:

fd = socket(AF_INET, SOCK_DGRAM, 0);
sendto(fd, buf, len, 0, (struct sockaddr*)&servaddr, sizeof(servaddr));

1 个答案:

答案 0 :(得分:1)

它不会选择随机IP。它使用操作系统的路由表来确定哪个本地IP最有可能将数据路由到目标地址。但是,无法查询实际选择使用的IP sendto()。您可以直接访问操作系统的路由表并尝试手动计算出来,但更好的选择是bind()套接字到您希望sendto()用作发送IP的特定IP,例如:

fd = socket(AF_INET, SOCK_DGRAM, 0);

struct sockaddr_in localaddr;
memset(&localaddr, 0, sizeof(addr));
localaddr.sin_family = AF_INET;
localaddr.sin_addr.s_addr = inet_addr("192.168.0.1"); // the desired local IP

bind(fd, (struct sockaddr*)&localaddr, sizeof(localaddr));

sendto(fd, buf, len, 0, (struct sockaddr*)&servaddr, sizeof(servaddr));