• linux广播


    linux广播

    
    
    // 发送端
    #include <stdio.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netdb.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <string.h>
    //#include <bits/socket.h>
    
    //只有UDP套接字允许广播或多播,ipv4中的多播地址范围是:224.0.0.0到239.255.255.255
    
    int main()
    {
        setvbuf(stdout, NULL, _IONBF, 0);
        fflush(stdout);
    
        int sock = -1;
        if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
        {
            perror("socket error");
            return 0;
        }
    
        const int opt = 1;
        //设置该套接字为广播类型,
        int nb = 0;
        nb = setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *)&opt, sizeof(opt));
        if(nb == -1)
        {
            perror("set socket error...");
            return 0;
        }
    
        struct sockaddr_in addrto;
        bzero(&addrto, sizeof(struct sockaddr_in));
        addrto.sin_family=AF_INET;
        addrto.sin_addr.s_addr=htonl(INADDR_BROADCAST);
        addrto.sin_port=htons(6000);
        int nlen=sizeof(addrto);
    
        while(1)
        {
            sleep(1);
            //从广播地址发送消息
            char smsg[] = {"abcdef"};
            int ret=sendto(sock, smsg, strlen(smsg), 0, (struct sockaddr *)&addrto, nlen);
            if(ret<0)
            {
                perror("set socket error...");
            }
            else
            {
                printf("ok ");
            }
        }
    
        return 0;
    }
    // 接收端
    #include <stdio.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netdb.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <string.h>
    
    int main()
    {
        setvbuf(stdout, NULL, _IONBF, 0);
        fflush(stdout);
    
        // 绑定地址
        struct sockaddr_in addrto;
        bzero(&addrto, sizeof(struct sockaddr_in));
        addrto.sin_family = AF_INET;
        addrto.sin_addr.s_addr = htonl(INADDR_ANY);
        addrto.sin_port = htons(6000);
    
        // 广播地址
        struct sockaddr_in from;
        bzero(&from, sizeof(struct sockaddr_in));
        from.sin_family = AF_INET;
        from.sin_addr.s_addr = htonl(INADDR_ANY);
        from.sin_port = htons(6000);
    
        int sock = -1;
        if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
        {
            perror("socket error
    ");
            return 0;
        }
    
        const int opt = 1;//UDP默认不支持广播,设置该套接字为广播类型,opt = 1
        int nb = 0;
        nb = setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *)&opt, sizeof(opt));
        if(nb == -1)
        {
            perror("set socket error
    ");
            return 0;
        }
    
        if(bind(sock,(struct sockaddr *)&(addrto), sizeof(struct sockaddr_in)) == -1)
        {
            perror("bind error
    ");
            return 0;
        }
    
        int len = sizeof(struct sockaddr_in);
        char smsg[100] = {0};
    
        while(1)
        {
            //从广播地址接受消息
            int ret=recvfrom(sock, smsg, 100, 0, (struct sockaddr*)&from,(socklen_t*)&len);
            if(ret<=0)
            {
                perror("recvfrom error
    ");
            }
            else
            {
                printf("%s	", smsg);
            }
    
            sleep(1);
        }
    
        return 0;
    }
  • 相关阅读:
    CLR c++/CLI 如何返回多个返回值
    在php 中显示array数据
    MVC已死,该是用MOVE的时候了
    拿到网规证书后,办北京户口的遭遇。
    利亚德股票限售股解禁表
    32位MSSQL数据库备份如何在64位MSSQL数据库上恢复
    利用DNS实现负载均衡
    购买服务器具体和什么参数有关
    简单来总结一下C++与C#之间的区别
    c# 操作DOS ping命令判断与指定主机是否可以通信
  • 原文地址:https://www.cnblogs.com/guxuanqing/p/11247108.html
Copyright © 2020-2023  润新知