(UDP协议的应用)简单的广播实现

来源:互联网 发布:股权众筹系统源码 编辑:程序博客网 时间:2024/06/06 00:31
发送者:#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[N] = {};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[N] = {};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;}
1 0