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;
    }
  • 相关阅读:
    LC.225. Implement Stack using Queues(using two queues)
    LC.232. Implement Queue using Stacks(use two stacks)
    sort numbers with two stacks(many duplicates)
    LC.154. Find Minimum in Rotated Sorted Array II
    LC.81. Search in Rotated Sorted Array II
    LC.35.Search Insert Position
    前后端分离:(一)
    Redis基本使用(一)
    GIT篇章(二)
    GIT篇章(一)
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11443724.html
Copyright © 2011-2022 走看看