UDP广播实例理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/s564200489/article/details/50683761

发送端:

#define MAXSIZE 80
void 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 80

void 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;
}

猜你喜欢

转载自blog.csdn.net/s564200489/article/details/50683761