zoukankan      html  css  js  c++  java
  • 广播实现

    广播范例:

    谁先接受绑定谁。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);
    }
  • 相关阅读:
    LeetCode456. 132模式
    LeetCode455. 分发饼干
    LeetCode454. 四数相加 II
    LeetCode453. 最小移动次数使数组元素相等
    matchMedia 媒体查询结果
    异常捕获
    常用xpath选择器和css选择器总结
    python-爬虫中的extract()
    Python应用前景广阔,怎么学才能快速上手?
    Python 为什么要有 pass 语句?
  • 原文地址:https://www.cnblogs.com/defen/p/5287636.html
Copyright © 2011-2022 走看看