广播
来源:互联网 发布:易语言自动关注源码 编辑:程序博客网 时间:2024/05/18 02:58
广播就是实现一对多的通讯,它通过广播地址发送数据报文实现的,注意:广播只可以用于UDP中。可以用于同一网段不通计算机的聊天室中。
//UDP才可以使用广播/*******************************************************///接受者就是一个服务器端,绑定一个广播地址,开始监听,接收文件.receiver.c#include#include #include #include #include #include int sockfd;void sig_handler(int signo){if(signo == SIGINT){printf("receiver will exited\n");close(sockfd);exit(1);}}int main(int argc,char **argv){if(argc < 2){fprintf(stderr,"usage: %s port\n",argv[0]);exit(1);}sockfd = socket(AF_INET,SOCK_DGRAM,0);if(sockfd < 0){perror("socket error");exit(1);}struct sockaddr_in serveraddr;memset(&serveraddr,0,sizeof(serveraddr));serveraddr.sin_family = AF_INET;serveraddr.sin_port = htons(atoi(argv[1]));/*atoi字符类型转换为整形*/serveraddr.sin_addr.s_addr = INADDR_ANY;//bindif(bind(sockfd,(struct sockaddr*)&serveraddr,sizeof(serveraddr)) < 0){perror("bind error");exit(1);}//char buffer[1024];struct sockaddr_in clientaddr;socklen_t len = sizeof(clientaddr);while(1){memset(&buffer,0,sizeof(buffer));memset(&clientaddr,0,sizeof(clientaddr));if(recvfrom(sockfd, buffer, sizeof(buffer),0,(struct sockaddr*)&clientaddr,&len) < 0){perror("recvfrom error");exit(1);}else{char ip[16];inet_ntop(AF_INET,&clientaddr.sin_addr.s_addr,ip,sizeof(ip));int port = ntohs(clientaddr.sin_port);printf("%s (%d) : %s\n",ip,port,buffer);}}return 0;}/********************************************************************************///广播发送者程序broadcast.c#include #include #include #include #include int main(int argc,char **argv){if(argc < 3){fprintf(stderr,"Usage: %s ip port \n",argv[0]);exit(1);}int sockfd ;sockfd = socket(AF_INET,SOCK_DGRAM,0);if(sockfd < 0){perror("socket error");exit(1);}//设置套接字选项,采用广播方式发送int opt = 1;setsocket(sockfd,SOL_SOCKET,SO_BROADCAST,&opt,sizeof(opt));//设置广播地址struct sockaddr_in serveraddr;memset(&serveraddr,0,sizeof(serveraddr));serveraddr.sin_family = AF_INET;serveraddr.sin_port = htons(atoi(argv[2]));//点分十进制转换成二进制inet_pton(AF_INET,argv[1],&serveraddr.sin_addr.s_addr);printf("I will broadcast ..........");char *info = "Today is a lucky day!";size_t size = strlen(info) *sizeof(char);if(sendto(sockfd,info,size,0,(struct sockaddr *)&serveraddr,sizeof(serveraddr)) < 0){perror("sendto error");exit(1);}else{printf("broadcast success\n");}close(sockfd);return 0;}
阅读全文
1 0
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播:
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播
- chrome 常用插件推荐
- 常用Java正则表达式
- 平移 缩放矩阵
- 机器学习——有监督学习的神经网络——反向传播算法
- 新手如何学习Java——Java学习路线图
- 广播
- rails筛选方法
- 自定义View控件值ScrollView,监听实现标题透明到显示
- ROS机器人操作系统现场培训课程|2017年9月
- 一些常用的终端命令
- java -- 批量处理图片
- Putty连接虚拟机Centos出现:Network error:Connection refused的解决方法
- Python2基础用法(中文编码,标识符,注释)
- 在一个DataTable中手动加一行数据