微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Linux系统下UDP发送和接收广播消息

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

编程之家小编现在分享给大家,也给大家做个参考。

// 发送端  
#include <iostream>  
#include <stdio.h>  
#include <sys/socket.h>  
#include <unistd.h>  
#include <sys/types.h>  
#include <netdb.h>  
#include <netinet/in.h>  
#include <arpa/inet.h>  
#include <string.h>  


using namespace std;  

int main()  
{  
    setvbuf(stdout, NULL, _IONBF, 0);   
    fflush(stdout);   

    int sock = -1;  
    if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)   
    {     
        cout<<"socket error"<<endl;   
        return false;  
    }     

    const int opt = 1;  
    //设置该套接字为广播类型,  
    int nb = 0;  
    nb = setsockopt(sock, SOL_SOCKET, SO_broADCAST, (char *)&opt, sizeof(opt));  
    if(nb == -1)  
    {  
        cout<<"set socket error..."<<endl;  
        return false;  
    }  

    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, (sockaddr*)&addrto, nlen);  
        if(ret<0)  
        {  
            cout<<"send error...."<<ret<<endl;  
        }  
        else  
        {         
            printf("ok ");    
        }  
    }  

    return 0;  
}
// 接收端

#include <iostream>  
#include <stdio.h>  
#include <sys/socket.h>  
#include <unistd.h>  
#include <sys/types.h>  
#include <netdb.h>  
#include <netinet/in.h>  
#include <arpa/inet.h>  
#include <string.h>  


using namespace std;  

int main()  
{  
    setvbuf(stdout, 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, sizeof(opt));  
    if(nb == -1)  
    {  
        cout<<"set socket error..."<<endl;  
        return false;  
    }  

    if(bind(sock,(struct sockaddr *)&(addrto), sizeof(struct sockaddr_in)) == -1)   
    {     
        cout<<"bind error..."<<endl;  
        return false;  
    }  

    int len = sizeof(sockaddr_in);  
    char smsg[100] = {0};  

    while(1)  
    {  
        //从广播地址接受消息  
        int ret=recvfrom(sock, 100, (struct sockaddr*)&from,(socklen_t*)&len);  
        if(ret<=0)  
        {  
            cout<<"read error...."<<sock<<endl;  
        }  
        else  
        {         
            printf("%s\t", smsg);     
        }  

        sleep(1);  
    }  

    return 0;  
}

以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐