【二十三】 Linux网络编程——广播与组播
来源:互联网 发布:js 数组 查找 编辑:程序博客网 时间:2024/05/01 23:57
【二十三】 Linux网络编程——广播与组播
/*multicast sender.c*/#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#define N 64typedef struct sockaddr SA;int main(int argc, char *argv[]){int sockfd;struct sockaddr_in peeraddr;char buf[N] = "This is a multicast package\n";if (argc < 3){printf("Usage : %s <ip> <port>\n", argv[0]);exit(-1);}if ((sockfd = socket(PF_INET, SOCK_DGRAM, 0)) < 0){perror("fail to socket");exit(-1);}bzero(&peeraddr, sizeof(peeraddr));peeraddr.sin_family = PF_INET;peeraddr.sin_port = htons(atoi(argv[2]));peeraddr.sin_addr.s_addr = inet_addr(argv[1]);while ( 1 ){sendto(sockfd, buf, N, 0, (SA *)&peeraddr, sizeof(peeraddr));sleep(1);}return 0;}
/*multicast receiver.c*/#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#define N 64typedef struct sockaddr SA;int main(int argc, char *argv[]){int sockfd;struct sockaddr_in myaddr, peeraddr;socklen_t peerlen;struct ip_mreq mreq;char buf[N];if (argc < 3){printf("Usage : %s <ip> <port>\n", argv[0]);exit(-1);}// XXX int socket(int domain, int type, int protocol);if ((sockfd = socket(PF_INET, SOCK_DGRAM, 0)) < 0){perror("fail to socket");exit(-1);}bzero(&mreq, sizeof(mreq));mreq.imr_multiaddr.s_addr = inet_addr(argv[1]);mreq.imr_interface.s_addr = htonl(INADDR_ANY);if (setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) < 0){perror("fail to setsockopt");exit(-1);}// XXX int bind(int sockfd, const struct sockaddr *addr,// socklen_t addrlen);bzero(&myaddr, sizeof(myaddr));myaddr.sin_family = PF_INET;myaddr.sin_port = htons(atoi(argv[2]));myaddr.sin_addr.s_addr = htonl(INADDR_ANY);if (bind(sockfd, (SA *)&myaddr, sizeof(myaddr)) < 0){perror("fail to bind");exit(-1);}/*int on = 1;if (setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on)) < 0){perror("fail to setsockopt");exit(-1);}*/peerlen = sizeof(peeraddr);while ( 1 ){recvfrom(sockfd, buf, N, 0, (SA *)&peeraddr, &peerlen);printf("[%s:%d] %s\n", inet_ntoa(peeraddr.sin_addr), ntohs(peeraddr.sin_port), buf);}return 0;}
- 【二十三】 Linux网络编程——广播与组播
- 【Linux网络编程】广播、组播与本地网络通信
- Linux网络编程一步一步学-网络广播、组播与单播
- Linux网络编程——UDP服务器和广播/组播
- Linux学习(二十六):网络广播组播
- Linux网络编程--(7)广播和组播
- 【UNIX网络编程】广播与多播
- 网络编程 笔记(十)多播与广播
- java网络编程: UDP 广播与多播的实现
- java网络编程: UDP 广播与多播的实现
- Linux网络编程——多播
- Linux网络编程——多播
- Linux网络编程——多播
- Linux网络编程——多播
- 【Linux网络编程】多播、组播
- linux网络编程之二-----多播(组播)编程
- Linux网络编程——广播
- Linux网络编程——广播
- 基于DirectShow视频及图片捕获软件的开发
- JSTL简介
- 国际化动态文件和其他标签的实例应用
- Java_11_15课堂总结
- 大文本和二进制操作
- 【二十三】 Linux网络编程——广播与组播
- js 加“...”的地方,考虑过长溢出省略处理
- POJ 1861 Network
- JSTL<fmt:parseNumber>标签
- java 线程基础
- u-boot bootm命令与内核传参过程
- Windows Debuggers: Part 1: A WinDbg Tutorial
- NDK编译错误:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘<’ token
- android命令集合