您的位置:首页 > 其它

(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;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: