UDP 多播服务模型
来源:互联网 发布:mysql w10 编辑:程序博客网 时间:2024/06/08 20:13
server.c
#include<errno.h>#include<semaphore.h>#include<string.h>#include<sys/stat.h>#include<fcntl.h>#include<errno.h>#include<stdlib.h>#include<unistd.h>#include<stdio.h>#include<sys/mman.h>#include<sys/types.h>#include<signal.h>#include<pthread.h>#include<netinet/in.h>#include<arpa/inet.h>#include<sys/socket.h>#include<net/if.h>#define SERVER_PORT 8000#define MAXLINE 1500#define GROUP "239.0.0.2"#define CLIENT_PORT 9000int main(){ struct sockaddr_in serveraddr,clientaddr; int sockfd; socklen_t clientlen; char ipstr[INET_ADDRSTRLEN]; char buf[MAXLINE]; ssize_t len; struct ip_mreqn group; sockfd=socket(AF_INET,SOCK_DGRAM,0); bzero(&serveraddr,sizeof(serveraddr)); serveraddr.sin_family=AF_INET; serveraddr.sin_addr.s_addr=htonl(INADDR_ANY); serveraddr.sin_port=htons(SERVER_PORT); bind(sockfd,(struct sockaddr*)&serveraddr,sizeof(serveraddr)); inet_pton(AF_INET,GROUP,&group.imr_multiaddr); inet_pton(AF_INET,"0.0.0.0",&group.imr_address); group.imr_ifindex=if_nametoindex("eno16777736"); setsockopt(sockfd,IPPROTO_IP,IP_MULTICAST_IF, &group,sizeof(group)); bzero(&clientaddr,sizeof(clientaddr)); clientaddr.sin_family=AF_INET; inet_pton(AF_INET,GROUP,&clientaddr.sin_addr.s_addr); clientaddr.sin_port=htons(CLIENT_PORT); while(fgets(buf,sizeof(buf),stdin)){ len=strlen(buf); sendto(sockfd,buf,len,0,(struct sockaddr*)&clientaddr,sizeof(clientaddr));} close(sockfd); return 0;}
client.c
#include<errno.h>#include<semaphore.h>#include<string.h>#include<sys/stat.h>#include<fcntl.h>#include<errno.h>#include<stdlib.h>#include<unistd.h>#include<stdio.h>#include<sys/mman.h>#include<sys/types.h>#include<signal.h>#include<pthread.h>#include<netinet/in.h>#include<arpa/inet.h>#include<sys/socket.h>#include<net/if.h>#define SERVER_PORT 8000#define CLIENT_PORT 9000#define GROUP "239.0.0.2"#define MAXLINE 4096int main(int argc,char* argv[]){ struct sockaddr_in serveraddr,clientaddr; int confd; char buf[MAXLINE]; ssize_t len; struct ip_mreqn group; confd=socket(AF_INET,SOCK_DGRAM,0); bzero(&clientaddr,sizeof(clientaddr)); clientaddr.sin_family=AF_INET; inet_pton(AF_INET,"0,0,0,0",&clientaddr.sin_addr.s_addr); clientaddr.sin_port=htons(CLIENT_PORT); bind(confd,(struct sockaddr*)&clientaddr,sizeof(clientaddr)); inet_pton(AF_INET,GROUP,&group.imr_multiaddr); inet_pton(AF_INET,"0.0.0.0",&group.imr_address); group.imr_ifindex=if_nametoindex("eno16777736"); setsockopt(confd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&group,sizeof(group)); while(1){ len=recvfrom(confd,buf,sizeof(buf),0,NULL,0); write(STDOUT_FILENO,buf,len); } close(confd); return 0;}
0 0
- UDP 多播服务模型
- UDP广播,UDP多播
- UDP 多播
- udp广播、多播
- UDP多播
- UDP单播、广播、多播
- UDP广播,多播,单播
- UDP 单播、广播和多播
- UDP 单播、广播和多播
- UDP 单播、广播和多播
- UDP单播、广播和多播
- UDP广播与多播
- UDP广播与多播
- UDP广播与多播
- c# udp多播通信
- UDP广播与多播
- UDP广播与多播
- UDP广播与多播
- bzoj1003: [ZJOI2006]物流运输
- Android Context完全解析,你所不知道的Context的各种细节
- 《奇异博士》+片尾两彩蛋
- OpenGL -- 位图 glBitmap
- Linux 进程和网络端口相关命令
- UDP 多播服务模型
- 【排序】直接插入
- Android中图片的裁剪和徐徐展开控件ClipDrawable
- [Android开发]从Android官方Demo谈RecyclerView的用法
- jQuery select下拉选框操作小结
- Javascript基础——利用定时器实现的图片无缝滚动(offsetLeft)
- 本地套接字domain通信
- jQuery 实现邮箱下拉列表自动补全功能
- Google APAC 2017 University Test Round E