UDP广播实例理解

来源:互联网 发布:vue vendor.js 包过大 编辑:程序博客网 时间:2024/05/18 01:24

发送端:

#define MAXSIZE 80void usage(const char *info){    printf("Usage: %s <srv PORT>\n", info);    exit(0);}int main(int argc, char *argv[]){    if(argc != 2)        usage(argv[0]);    int sockfd;    char buf[MAXSIZE];    struct sockaddr_in myaddr, peeraddr;    sockfd = Socket(PF_INET, SOCK_DGRAM, 0);    bzero(&myaddr, sizeof(myaddr));    myaddr.sin_family = PF_INET;    myaddr.sin_port = htons(atoi(argv[1]));    myaddr.sin_addr.s_addr = htonl(INADDR_ANY);//广播地址    Bind(sockfd, (struct sockaddr *)&myaddr, sizeof(myaddr));//绑定socket    socklen_t len = sizeof(peeraddr);    while(1){        recvfrom(sockfd, buf, MAXSIZE,0, (struct sockaddr *)&peeraddr, &len);        printf("recv from [%s:%d] : %s\n",inet_ntoa(peeraddr.sin_addr),ntohs(peeraddr.sin_port), buf);    }    return 0;}

接收端:

#include "sock.h"#define MAXSIZE 80void usage(const char *info){    printf("Usage: %s <srv IP> <srv PORT>\n", info);    exit(0);}int main(int argc, char *argv[]){    if(argc != 3)        usage(argv[0]);    int sockfd;    char buf[MAXSIZE];    struct sockaddr_in peeraddr;    sockfd = socket(PF_INET, SOCK_DGRAM, 0);     // enable BROADCAST    int on = 1;    setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST,            &on, sizeof(on));//开启广播功能    bzero(&peeraddr, sizeof(peeraddr));    peeraddr.sin_family = AF_INET;    peeraddr.sin_port = htons(atoi(argv[2]));    peeraddr.sin_addr.s_addr = inet_addr(argv[1]);    strncpy(buf, "This is a broadcast message!\n", MAXSIZE);    while(1){        sendto(sockfd, buf, MAXSIZE, 0,            (struct sockaddr *)&peeraddr, sizeof(peeraddr));        sleep(1);    }    return 0;}
0 0
原创粉丝点击