[問題] UDP multicast的問題
遇到的問題:
目前在練習UDP作Multicast,可是遇到了以下的一些問題= =
發送端比較簡單,對multicast的IP發送即可
問題出在接受端:除了設定SOL_REUSEADDR和IP_ADD_MEMBERSHIP外
還要bind(),但我看了很多範例都是bind到addr.sin_addr.s_addr=htonl(INADDR_ANY);
也就是接受所有的封包?
所以要做Multicast接受端都是要bind此位置嗎?
另外bind和setsockopt的順序會影響結果嗎?
希望得到的正確結果:是否都是bind到INADDR_ANY,在bind前後setsockopt有無差別?
程式跑出來的錯誤結果:沒bind INADDR_ANY 或是其他位指都跑不出來
開發平台: g++ C++ Linux
有問題的code:
這是網路上一小段擷取的code,找了幾個都差不多寫法@@
Example:
memset(&addr,0,sizeof(addr));
addr.sin_family=AF_INET;
addr.sin_addr.s_addr=htonl(INADDR_ANY); /* N.B.: differs from sender */
addr.sin_port=htons(HELLO_PORT);
/* bind to receive address */
if (bind(fd,(struct sockaddr *) &addr,sizeof(addr)) < 0) {
perror("bind");
exit(1);
}
/* use setsockopt() to request that the kernel join a multicast group */
mreq.imr_multiaddr.s_addr=inet_addr(HELLO_GROUP);
mreq.imr_interface.s_addr=htonl(INADDR_ANY);
if (setsockopt(fd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq)) < 0) {
perror("setsockopt");
exit(1);
}
/* now just enter a read-print loop */
while (1) {
addrlen=sizeof(addr);
if ((nbytes=recvfrom(fd,msgbuf,MSGBUFSIZE,0,
(struct sockaddr *) &addr,&addrlen)) < 0) {
perror("recvfrom");
exit(1);
}
puts(message);
}
補充說明:感謝大家XD
thanks
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.240.58
※ 編輯: homestay 來自: 140.113.240.58 (04/07 15:26)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章