zoukankan      html  css  js  c++  java
  • UDP广播

    广播是在局域网之间的一对多的通信方式,使用的udp协议

    /***
    client.c
    ***/
    #include <stdio.h>
    #include <unistd.h>
    #include <string.h>
    #include <sys/socket.h>
    #include <arpa/inet.h>
    
    #define SERVER_PORT 8000
    #define MAXLINE 4096
    #define CLIENT_PORT 9000
    
    int main(int argc, char *argv[])
    {
        struct sockaddr_in localaddr;
        int confd;
        ssize_t len;
        char buf[MAXLINE];
    
        //1.创建一个socket
        confd = socket(AF_INET, SOCK_DGRAM, 0);
    
        //2.初始化本地端地址
        bzero(&localaddr, sizeof(localaddr));
        localaddr.sin_family = AF_INET;
        inet_pton(AF_INET, "0.0.0.0" , &localaddr.sin_addr.s_addr);
        localaddr.sin_port = htons(CLIENT_PORT);
    
        int ret = bind(confd, (struct sockaddr *)&localaddr, sizeof(localaddr));  //显示绑定不能省略
        if (ret == 0)
            printf("...bind ok...
    ");
    
        while (1) {
            len = recvfrom(confd, buf, sizeof(buf), 0, NULL, 0);
            write(STDOUT_FILENO, buf, len);
        }
        close(confd);
    
        return 0;
    }
    /***
    server.c
    ***/
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <sys/socket.h>
    #include <string.h>
    #include <arpa/inet.h>
    #include <net/if.h>
    
    #define SERVER_PORT 8000                                    /* 无关紧要 */
    #define MAXLINE 1500
    
    #define BROADCAST_IP "192.168.42.255"
    #define CLIENT_PORT 9000                                    /* 重要 */
    
    int main(void)
    {
        int sockfd;
        struct sockaddr_in serveraddr, clientaddr;
        char buf[MAXLINE];
    
        /* 构造用于UDP通信的套接字 */
        sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    
        bzero(&serveraddr, sizeof(serveraddr));
        serveraddr.sin_family = AF_INET;                        /* IPv4 */
        serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);         /* 本地任意IP INADDR_ANY = 0 */
        serveraddr.sin_port = htons(SERVER_PORT);
    
        bind(sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr));
    
        int flag = 1;
        setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &flag, sizeof(flag));
    
        /*构造 client 地址 IP+端口  192.168.7.255+9000 */
        bzero(&clientaddr, sizeof(clientaddr));
        clientaddr.sin_family = AF_INET;
        inet_pton(AF_INET, BROADCAST_IP, &clientaddr.sin_addr.s_addr);
        clientaddr.sin_port = htons(CLIENT_PORT);
    
        int i = 0;
        while (1) {
            sprintf(buf, "Drink %d glasses of water
    ", i++);
            //fgets(buf, sizeof(buf), stdin);
            sendto(sockfd, buf, strlen(buf), 0, (struct sockaddr *)&clientaddr, sizeof(clientaddr));
            sleep(1);
        }
        close(sockfd);
        return 0;
    }
  • 相关阅读:
    错误页面提示大全
    http协议基础知识
    初识性能测试
    seo
    测试工程师的分类和发展方向
    Jsessionid和cookie的区别与联系
    nginx配置
    复盘能力
    开发自测方法
    OKR 目标关键成果法
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11443724.html
Copyright © 2011-2022 走看看