(UDP协议的应用)简单的广播实现
2016-07-27 20:40
531 查看
发送者:#include #include #include /* See NOTES */#include #include #include #include #define err_log(errlog) do{perror(errlog); exit(1);}while(0)//基于UDP协议简单的广播实现#define N 128int main(int argc, const char *argv[]){int sockfd;struct sockaddr_in broadcastaddr , clientaddr;char
buf
= {};if(argc != 3){fprintf(stderr, "Usage:%s serverip port.\n", argv[0]);return -1;} //创建数据报套接字if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0){err_log("fail to socket");} //添加网络信息结构体broadcastaddr.sin_family = AF_INET;broadcastaddr.sin_addr.s_addr
= inet_addr(argv[1]);broadcastaddr.sin_port = htons(atoi(argv[2]));// 添加发送广播的权限int on = 1; //设置套接字的属性,if(setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on)) < 0){err_log("fail to setsockopt");} while(1){printf("Input >");fgets(buf, N, stdin);buf[strlen(buf)-1]
= '\0';if(sendto(sockfd, buf, N, 0, (struct sockaddr *)&broadcastaddr, sizeof(broadcastaddr)) < 0){err_log("fail to sendto");}if(strncmp(buf, "quit", 4) == 0){break;}}close(sockfd);return 0;}接收者:#include #include #include /* See NOTES */#include #include #include
#include #define err_log(errlog) do{perror(errlog); exit(1);}while(0)#define N 128int main(int argc, const char *argv[]){int sockfd;struct sockaddr_in broadcastaddr;char buf
= {};if(argc != 3){fprintf(stderr, "Usage:%s serverip port.\n", argv[0]);return
-1;} //套接字创建if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0){err_log("fail to socket");} //网络信息添加broadcastaddr.sin_family = AF_INET;broadcastaddr.sin_addr.s_addr = inet_addr(argv[1]);broadcastaddr.sin_port = htons(atoi(argv[2])); //绑定广播的IP地址以及其端口号if(bind(sockfd,
(struct sockaddr *)&broadcastaddr, sizeof(broadcastaddr)) < 0){err_log("fail to bind");}socklen_t addrlen = sizeof(struct sockaddr);while(1){if(recvfrom(sockfd, buf, N, 0, NULL,NULL) < 0){err_log("fail to recvfrom");}printf("From send:%s\n", buf);if(strncmp(buf,
"quit", 4) == 0){break;}}close(sockfd);return 0;}
buf
= {};if(argc != 3){fprintf(stderr, "Usage:%s serverip port.\n", argv[0]);return -1;} //创建数据报套接字if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0){err_log("fail to socket");} //添加网络信息结构体broadcastaddr.sin_family = AF_INET;broadcastaddr.sin_addr.s_addr
= inet_addr(argv[1]);broadcastaddr.sin_port = htons(atoi(argv[2]));// 添加发送广播的权限int on = 1; //设置套接字的属性,if(setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on)) < 0){err_log("fail to setsockopt");} while(1){printf("Input >");fgets(buf, N, stdin);buf[strlen(buf)-1]
= '\0';if(sendto(sockfd, buf, N, 0, (struct sockaddr *)&broadcastaddr, sizeof(broadcastaddr)) < 0){err_log("fail to sendto");}if(strncmp(buf, "quit", 4) == 0){break;}}close(sockfd);return 0;}接收者:#include #include #include /* See NOTES */#include #include #include
#include #define err_log(errlog) do{perror(errlog); exit(1);}while(0)#define N 128int main(int argc, const char *argv[]){int sockfd;struct sockaddr_in broadcastaddr;char buf
= {};if(argc != 3){fprintf(stderr, "Usage:%s serverip port.\n", argv[0]);return
-1;} //套接字创建if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0){err_log("fail to socket");} //网络信息添加broadcastaddr.sin_family = AF_INET;broadcastaddr.sin_addr.s_addr = inet_addr(argv[1]);broadcastaddr.sin_port = htons(atoi(argv[2])); //绑定广播的IP地址以及其端口号if(bind(sockfd,
(struct sockaddr *)&broadcastaddr, sizeof(broadcastaddr)) < 0){err_log("fail to bind");}socklen_t addrlen = sizeof(struct sockaddr);while(1){if(recvfrom(sockfd, buf, N, 0, NULL,NULL) < 0){err_log("fail to recvfrom");}printf("From send:%s\n", buf);if(strncmp(buf,
"quit", 4) == 0){break;}}close(sockfd);return 0;}
相关文章推荐
- UVA-10655 Contemplation! Algebra (矩阵快速幂)
- Android代码故事第一回,平均间隔的按钮
- python thread学习
- Oracle 基本知识 内含 SQLplus命令,Oracle常用用户
- 大话数据结构 -- 第九章 排序
- Expanding Rods<poj1905>
- RHEL6.5 drdb配置
- Spring的三大核心组件以及其主要分工
- disable bootstrap
- 集合
- 数据库事务隔离级别
- 设计模式GOF23——开篇
- nyoj 20 吝啬的国度
- CodeForces 371C Hamburgers
- 两个栈实现队列 两个队列实现栈
- HDU 2188 悼念512汶川大地震遇难同胞——选拔志愿者(巴什博奕)
- BitMap
- 前端常用到的颜色值和长度值设置
- gdb远程调试过程
- CodeForces 691C Exponential notation