• 广播实现


    广播范例:

    谁先接受绑定谁。Udp传输都遵循这个规则。

    广播步骤:

    接受:

    1、 创建用户数据包套接字socket()

    2、 绑定本地ip地址和端口bind()

    3、 接受数据recvfrom()

    4、 关闭socketfd(close())

    发送:

    1、 创建用户数据报套接字socket()

    2、 打开广播功能setsockopt();

    Int on=1

    Setsockopt(socketfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(int));

    3、 初始化接受方地址(指定该地址为组播地址192.168.1.255struct sockaddr_in

    4、 发送数据sendto()倒数第二个参数为第二步指定的ipport

    关闭套接字socket();

    代码范例:
    客户端(接受数据)
    #include<stdio.h>
    #include<netinet/in.h>
    #include<stdlib.h>
    #include<string.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include<pthread.h>
    #include<strings.h>
    int main()
    {    int socketfd = socket(AF_INET,SOCK_DGRAM,0);//、、、、、1.创建udp套接字 得到socketfd
        struct sockaddr_in saddr;
        memset(&saddr,0,sizeof(saddr));
        saddr.sin_family = AF_INET;
        saddr.sin_port = htons(6000);
        saddr.sin_addr.s_addr = htonl(INADDR_ANY);
        int s = sizeof(struct sockaddr_in);    
        bind(socketfd,(struct sockaddr *)&saddr,s);//、、、、、、、2、绑定本机ip和port;bind()
        struct sockaddr_in caddr;
        char buf1[20];
        int n;
        n = recvfrom(socketfd,buf1,20,0,(struct sockaddr *)&caddr,&s);//、、、、3、接受数据recvfrom()….caddr自动填写的。
            buf1[n] = '';
            printf("%s
    ",buf1);
            
        close(socketfd);//、、、、、、、、、、、、、、、、、4、关闭套接字
    }
    
    服务器(发送数据)
    #include<stdio.h>
    #include<netinet/in.h>
    #include<stdlib.h>
    #include<string.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include<pthread.h>
    #include<strings.h>
    
    int main()
    {    int socketfd = socket(AF_INET,SOCK_DGRAM,0);//、、、、、1.创建套接字socket
        struct sockaddr_in saddr;
        memset(&saddr,0,sizeof(saddr));
        saddr.sin_family = AF_INET;
        saddr.sin_port = htons(6000);
        saddr.sin_addr.s_addr = inet_addr("192.168.193.255");
    /*
        int on = 1;
        setsockopt(socketfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on));//、、、、、2、打开广播功能
        int s = sizeof(struct sockaddr);    
        char *buf = "hello";
        
        sendto(socketfd,buf,strlen(buf),0,(struct sockaddr *)&saddr,s);//3、发送数据saddr为广播地址。
        close(socketfd);
    }
  • 相关阅读:
    1055. [HAOI2008]玩具取名【区间DP】
    BZOJ2435:[NOI2011]道路修建 (差分)
    1084. [SCOI2005]最大子矩阵【网格DP】
    1060. [ZJOI2007]时态同步【树形DP】
    1050. [HAOI2006]旅行【并查集+枚举】
    2463. [中山市选2009]谁能赢呢?【博弈论】
    luogu P1195 口袋的天空
    luogu P1162 填涂颜色
    luogu P1223 排队接水
    luogu P1331 海战
  • 原文地址:https://www.cnblogs.com/defen/p/5287636.html
Copyright © 2020-2023  润新知