- 论坛徽章:
- 0
|
简单代码如下:
recv_sock = socket (AF_INET, SOCK_DGRAM, 0);
/*
* Fill in the address structure for local_addr, and bind it.
*/
bzero(&local_addr, sizeof(local_addr));
local_addr.sin_family = AF_INET;
local_addr.sin_port = htons( 8888 ) ;
local_addr.sin_addr.s_addr = INADDR_ANY; //1//不指定具体的绑定地址
// local_addr.sin_addr.s_addr = inet_addr("192.168.1.1" ) ; ///2//指定具体的绑定地址
retval = bind(recv_sock, (struct sockaddr *)&local_addr, sizeof(local_addr) );
/*
* add local address to multicast membership if want to receive multicast packets.
*/
mr.imr_multiaddr.s_addr = inet_addr("232.1.1.1" ) ;
mr.imr_interface.s_addr = inet_addr("192.168.1.1 " );
retval = setsockopt(recv_sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mr, sizeof(mr));
/*
* begin to receive packets.
*/
retval = recvfrom(recv_sock, RcvBuf, buflen, 0,(struct sockaddr *)&remote_addr, &fromlen);
在windows 2000系统下:
无论指定还是不指定具体的绑定地址,均可以收到发送到 8888 端口的 组播(232.1.1.1) 广播(192.168.1.255) 点对点(192.168.1.1)数据
在solaris 10 系统下:
不指定具体的绑定地址,均可以收到发送到 8888 端口的 组播(232.1.1.1) 广播(192.168.1.255) 点对点(192.168.1.1)数据,与windows相同
指定具体的绑定地址,只能收到发送到 8888 端口的 点对点(192.168.1.1)数据,为什么组播收不到了啊,难道solaris平台下,想接收组播数据,bind 地址必须为INADDR_ANY ???
请问大家:
在其它的系统平台下遇到过类似的问题吗? 如何解决的? 我只想接收从网络接口192.168.1.1(多网络接口)来的组播数据(不要点对点的和广播数据)
[ 本帖最后由 ammy 于 2007-11-20 23:43 编辑 ] |
|