- 論壇徽章:
- 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系統(tǒng)下:
無論指定還是不指定具體的綁定地址,均可以收到發(fā)送到 8888 端口的 組播(232.1.1.1) 廣播(192.168.1.255) 點對點(192.168.1.1)數(shù)據(jù)
在solaris 10 系統(tǒng)下:
不指定具體的綁定地址,均可以收到發(fā)送到 8888 端口的 組播(232.1.1.1) 廣播(192.168.1.255) 點對點(192.168.1.1)數(shù)據(jù),與windows相同
指定具體的綁定地址,只能收到發(fā)送到 8888 端口的 點對點(192.168.1.1)數(shù)據(jù),為什么組播收不到了啊,難道solaris平臺下,想接收組播數(shù)據(jù),bind 地址必須為INADDR_ANY ???
請問大家:
在其它的系統(tǒng)平臺下遇到過類似的問題嗎? 如何解決的? 我只想接收從網(wǎng)絡接口192.168.1.1(多網(wǎng)絡接口)來的組播數(shù)據(jù)(不要點對點的和廣播數(shù)據(jù))
[ 本帖最后由 ammy 于 2007-11-20 23:43 編輯 ] |
|