linux组播编程一个简单的例子
来源:互联网 发布:mac怎样彻底卸载软件 编辑:程序博客网 时间:2024/04/30 09:05
废话少说,直接上程序
接收端程序如下:
#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <time.h> #include <string.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> #define HELLO_PORT 1234 #define HELLO_GROUP "224.0.0.2" #define MSGBUFSIZE 256 int main(int argc, char *argv[]) { struct sockaddr_in addr; int fd, nbytes,addrlen; struct ip_mreq mreq; char msgbuf[MSGBUFSIZE]; int i=0; u_int yes=1; /*** MODIFICATION TO ORIGINAL */ /* create what looks like an ordinary UDP socket */ if ((fd=socket(AF_INET,SOCK_DGRAM,0)) < 0) { perror("socket"); exit(1); } /**** MODIFICATION TO ORIGINAL */ /* allow multiple sockets to use the same PORT number */ if (setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(yes)) < 0) { perror("Reusing ADDR failed"); exit(1); } /*** END OF MODIFICATION TO ORIGINAL */ /* set up destination address */ 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) { //ssize_t recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen); addrlen=sizeof(addr); if ((nbytes=recvfrom(fd, msgbuf, MSGBUFSIZE, 0, (struct sockaddr *) &addr, (socklen_t *)&addrlen)) < 0) { perror("recvfrom"); exit(1); } printf("nbytes=%d\n",nbytes); puts(msgbuf); } return 0; }
//如果运行rcv程序的时候出现setopt:no device 执行下面语句即可
// route add -net 225.18.1.7 netmask 225.18.1.7 eth0
发送端程序如下:
#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <time.h> #include <string.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> #define HELLO_PORT 1234 #define HELLO_GROUP "224.0.0.2" int main(int argc, char *argv[]) { struct sockaddr_in addr; int fd, cnt; struct ip_mreq mreq; char *message="Hello, World!"; /* create what looks like an ordinary UDP socket */ if ((fd=socket(AF_INET,SOCK_DGRAM,0)) < 0) { perror("socket"); exit(1); } /* set up destination address */ memset(&addr,0,sizeof(addr)); addr.sin_family=AF_INET; addr.sin_addr.s_addr=inet_addr(HELLO_GROUP); addr.sin_port=htons(HELLO_PORT); /* now just sendto() our destination! */ while (1) { if (sendto(fd,message, strlen(message), 0, (struct sockaddr *) &addr, sizeof(addr)) < 0) { perror("sendto"); exit(1); } sleep(1); } return 0; }
0 0
- linux组播编程一个简单的例子
- 简单的组播例子
- IP组播的简单例子
- c#简单的组播例子
- Linux下UDP的组播接收和发送的简单例子
- C#简单组播例子
- 一个Socket网络编程的简单例子
- 一个简单的元编程例子
- 一个简单的java socket编程例子
- Linux C编程的一个小例子——实现一个简单的who命令(第一版)
- Linux组播编程
- 一个关于linux socket的简单例子
- 一个关于linux socket的简单例子
- 一个关于linux socket的简单例子
- linux 一个简单的进程创建例子
- linux 下的组播编程
- 一个简单的轮播
- 在windows 下用C实现的一个多播的简单例子。
- MAC下Android配置1
- FreeMarker与Spring框架及SSM的整合过程
- Android Studio Android UI控件学习笔记
- Android 单位转换工具类
- log4j
- linux组播编程一个简单的例子
- 日常小结-Schema语法
- leetcode61 Rotate List
- 指定View的几个角为圆角
- Android studio 插件使用技巧
- MAC下Android真机调试
- Docker实战(一):Docker基础命令
- AFNetworking详解
- IDM霍思燕版