场景:多网卡组播有关问题
多网卡组播问题
应该是老问题了。但是在网上搜索了4天,看见的方法都试过了,问题仍然存在。郁闷啊~
机器中有两个网卡。Ip分别是
192.168.20.105
192.168.241.1
后两个是vmware虚拟机的虚拟网卡。
组播时已经绑定了输出网卡是第一个网卡的IP。但用wireshark查看每次都是用第二个网卡发送出去。
一怒之下,把bind,接收,发送的ip全改成第一个ip,情况仍然不变。
操作系统是win7。但觉得跟win7关系不大。
代码如下:
if (!soap_valid_socket(soap_bind(&wsdd_soap, "192.168.20.105", DISCOVERY_PORT, 100))) {
printf("Create discover soap fail \n");
return -1;
}
printf("bind ip address is %s \n", inet_ntoa(wsdd_soap.peer.sin_addr)); //显示192.168.20.105,表明ip已写入成功。
ret = setsockopt(wsdd_soap.master, SOL_SOCKET, SO_REUSEADDR, (char*)&sock_opt, sizeof(sock_opt));
if (ret
printf("Failed to set the socket option\n");
return -1;
}
mcast.imr_multiaddr.s_addr = inet_addr(IPV4_MULTICAST_ADDRESS);
mcast.imr_interface.s_addr = inet_addr("192.168.20.105); // 绑定接收信息的IP
ret = setsockopt(wsdd_soap.master, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char*)&mcast, sizeof(mcast));
if (ret
result = WSAGetLastError();
printf("Failed to add broadcast group! code: %d\n", result);
return -1;
}
struct in_addr if_req;
if_req.s_addr = inet_addr("192.168.20.105"); // 绑定发送信息的IP
if( setsockopt( wsdd_soap.master, IPPROTO_IP, IP_MULTICAST_IF, (char*)&if_req, sizeof(struct in_addr) )
perror("setsockopt:");
return -1;
}
然后就是组播信息发送了。
问题出在哪里啊?请各大虾帮忙。
或者请教我如何修改组播使用的默认网卡。
多网卡;组播;默认网卡
分享到:
------解决方案--------------------
这里有个组播的例子SNTP,你看下:
http://download.csdn.net/detail/geoff08zhang/4571358