我是靠谱客的博主 勤劳自行车,这篇文章主要介绍openwrt之应用组播multicast发送接收,现在分享给大家,希望可以做个参考。

组播基本介绍

根据以上介绍 , 我们写出组播接收程序! 

应用背景

wifi board 连接上级路由器,而后通过pc网络调试助手向其发送组播数据 ! 组播地址ip 定位: 224.0.1.100, 在上面的理论介绍中,该地址为:预留多播地址:在224.0.1.0~238.255.255.255之间,可用于全球范围(如Internet)或网络协议

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
int multicast_server_init(void) { int err = -1; char buf[100]={0}; struct sockaddr_in local_addr; /*本地地址*/ struct sockaddr_in peer_addr; struct stConfig *config = config_list(); ULOG_INFO("WIFI option : %s,%dn",config->addr,config->port); multicast_server_fd = socket(AF_INET, SOCK_DGRAM, 0); /*建立套接字*/ if (multicast_server_fd == -1) { perror("socket()"); return -1; } /*初始化地址*/ memset(&local_addr, 0, sizeof(local_addr)); local_addr.sin_family = AF_INET; local_addr.sin_addr.s_addr = htonl(INADDR_ANY); //local_addr.sin_port = htons(MCAST_PORT); local_addr.sin_port = htons(config->port); /*设置回环许可*/ int loop = 1; err = setsockopt(multicast_server_fd,IPPROTO_IP, IP_MULTICAST_LOOP,&loop, sizeof(loop)); if(err < 0) { perror("setsockopt():IP_MULTICAST_LOOP"); close(multicast_server_fd); return -3; } bool bReuseaddr = true; err = setsockopt(multicast_server_fd,SOL_SOCKET, SO_REUSEADDR,&bReuseaddr, &bReuseaddr); if(err < 0) { perror("setsockopt():SOL_REUSEADDR"); close(multicast_server_fd); return -3; } /*绑定socket*/ err = bind(multicast_server_fd,(struct sockaddr*)&local_addr, sizeof(local_addr)) ; if(err < 0) { perror("bind()"); close(multicast_server_fd); return -2; } struct ip_mreq mreq; /*加入多播组*/ //mreq.imr_multiaddr.s_addr = inet_addr(MCAST_ADDR); /*多播地址*/ mreq.imr_multiaddr.s_addr = inet_addr(config->addr); /*多播地址*/ mreq.imr_interface.s_addr = htonl(INADDR_ANY); /*网络接口为默认*/ membership: memset(buf,0x0,100); //通过wlan0-1路由数据,允许所有组播数据 sprintf(buf,"route add -net 224.0.1.100 netmask 255.255.255.255 wlan0-1"); system(buf); /*将本机加入多播组*/ err = setsockopt(multicast_server_fd, IPPROTO_IP, IP_ADD_MEMBERSHIP,&mreq, sizeof (mreq)); if (err < 0) { perror("setsockopt():IP_ADD_MEMBERSHIP"); //return -4; sleep(2); goto membership; } return 0; }

但该程序运行后,并不能友好的接收数据;  而后加入/usr/sbin/igmpproxy /var/etc/igmpproxy.conf , 路由组播接收数据稳定, 但是同时有两个客户端向其发送数据,则有一方不能正常通信, 通过重新初始化程序方能通信!

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
root@Leedarson:~# cat /etc/config/igmpproxy config igmpproxy option quickleave 1 config phyint wan option network wwan option direction upstream list altnet 192.168.1.0/24 config phyint lan option network lan option direction downstream

其中,upstream 、 downstream 在我的项目中对应wlan0-1(station mode), br-lan 接口! 用于定向路由网络组播数据!

最后

以上就是勤劳自行车最近收集整理的关于openwrt之应用组播multicast发送接收的全部内容,更多相关openwrt之应用组播multicast发送接收内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(77)

评论列表共有 0 条评论

立即
投稿
返回
顶部