多播demo
来源:互联网 发布:iroha 知乎 编辑:程序博客网 时间:2024/06/05 00:44
服务端:
#include <stdio.h>#include <stdlib.h>#include <sys/types.h> /* See NOTES */#include <sys/socket.h>#include <string.h>#include <netinet/in.h>#include <arpa/inet.h>#define MCAST_PORT 8888#define MCAST_ADDR "224.0.0.101" /*一个局部连接多播地址,路由器不进行转发*/#define MCAST_INTERVAL 5 /*发送间隔时间*/#define BUFF_SIZE 256 /*接收缓冲区大小*/int main(int argc, char*argv[]){ int s; /*套接字文件描述符*/ struct sockaddr_in local_addr; /*本地地址*/ int err = -1; s = socket(AF_INET, SOCK_DGRAM, 0); /*建立套接字*/ if (s == -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); /*绑定socket*/ err = bind(s,(struct sockaddr*)&local_addr, sizeof(local_addr)) ; if(err < 0) { perror("bind()"); return -2; } /*设置回环许可*/ int loop = 1; err = setsockopt(s,IPPROTO_IP, IP_MULTICAST_LOOP,&loop, sizeof(loop)); if(err < 0) { perror("setsockopt():IP_MULTICAST_LOOP"); return -3; } struct ip_mreq mreq; /*加入多播组*/ mreq.imr_multiaddr.s_addr = inet_addr(MCAST_ADDR); /*多播地址*/ mreq.imr_interface.s_addr = htonl(INADDR_ANY); /*网络接口为默认*/ /*将本机加入多播组*/ err = setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP,&mreq, sizeof (mreq)); if (err < 0) { perror("setsockopt():IP_ADD_MEMBERSHIP"); return -4; } int times = 0; int addr_len = 0; char buff[BUFF_SIZE]; int n = 0; /*循环接收多播组的消息,5次后退出*/ for(times = 0;times<5;times++) { addr_len = sizeof(local_addr); memset(buff, 0, BUFF_SIZE); /*清空接收缓冲区*/ /*接收数据*/ n = recvfrom(s, buff, BUFF_SIZE, 0,(struct sockaddr*)&local_addr, &addr_len); if( n== -1) { perror("recvfrom()"); } /*打印信息*/ printf("Recv %dst message from server:%s\n", times, buff); sleep(MCAST_INTERVAL); } /*退出多播组*/ err = setsockopt(s, IPPROTO_IP, IP_DROP_MEMBERSHIP,&mreq, sizeof (mreq)); close(s); return 0;}
客户端:
#include <stdio.h>#include <stdlib.h>#include <sys/types.h> /* See NOTES */#include <sys/socket.h>#include <string.h>#include <netinet/in.h>#include <arpa/inet.h>#define MCAST_PORT 8888#define MCAST_ADDR "224.0.0.100" /*一个局部连接多播地址,路由器不进行转发*/#define MCAST_DATA "BROADCAST TEST DATA" /*多播发送的数据*/#define MCAST_INTERVAL 5 /*发送间隔时间*/int main(int argc, char*argv){ int s; struct sockaddr_in mcast_addr; s = socket(AF_INET, SOCK_DGRAM, 0); /*建立套接字*/ if (s == -1) { perror("socket()"); return -1; } memset(&mcast_addr, 0, sizeof(mcast_addr));/*初始化IP多播地址为0*/ mcast_addr.sin_family = AF_INET; /*设置协议族类行为AF*/ mcast_addr.sin_addr.s_addr = inet_addr(MCAST_ADDR);/*设置多播IP地址*/ mcast_addr.sin_port = htons(MCAST_PORT); /*设置多播端口*/ while(1) { int n = sendto(s,MCAST_DATA,sizeof(MCAST_DATA),0,(struct sockaddr*)&mcast_addr,sizeof(mcast_addr)); if( n < 0) { perror("sendto()"); return -2; } sleep(MCAST_INTERVAL); /*等待一段时间*/ } return 0;}
0 0
- 多播demo
- 无缝轮播demo
- 一屏展示多个li轮播设置demo
- Socket本地组播Demo
- Swiper轮播显示Demo
- 多播,组播
- 多播、组播
- 单播,多播
- 多播,组播
- 单播&&多播
- Js图片轮播功能DEMO
- 原生javascript简单轮播效果demo
- 原生js轮播效果demo
- “单播”“组播”和“多播”
- 单播、广播、组播(多播)
- 单播、广播、组播(多播)
- 单播 多播 组播
- 单播,组播,多播
- 怎样使一个层垂直居中于浏览器中
- 如何垂直居中文本
- 关于DIV高度自动伸展的问题
- GeoServer发布mbtiles文件
- 待研究
- 多播demo
- 对于容器map的使用---map::value_type
- java输出扭曲验证码
- Hibernate的批量更新和删除
- 关于如何在微信里面让video不全屏播放。
- 用velocity代替jsp作为程序视图展示
- https原理:证书传递、验证和数据加密、解密过程解析
- Java封装
- 笔试面试算法经典--二叉树的镜像-递归与非递归实现(Java)