博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
广播发送与接收
阅读量:7296 次
发布时间:2019-06-30

本文共 2074 字,大约阅读时间需要 6 分钟。

//发送端

#include <iostream>  

#include <stdio.h>  

#include <string.h>  
#include <winsock2.h>
  
using namespace std;  
  
int main()  

{   

    WSADATA wsaData;

    short version = MAKEWORD(2,0);
    WSAStartup(version,&wsaData);//初始化socket

    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[] = {"broadcast msg"};  
        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 <string.h>  
#include <winsock2.h>
  
using namespace std;  
  
int main()  
{  
    WSADATA wsaData;
    short version = MAKEWORD(2,0);
    WSAStartup(version,&wsaData);//初始化socket
    // 绑定地址  
    struct sockaddr_in addrto;  
    memset(&addrto, 0, 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;  
    memset(&from, 0, sizeof(struct sockaddr_in));  
      
    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;  
    }  
    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, smsg, 100, 0, (struct sockaddr*)&from,&len);   
        if(ret<=0)  
        {  
            cout<<"read error...."<<sock<<endl;  
        }  
        else  
        {         
            printf("%s\n", smsg);     
        }  
    }  
    return 0;  

 

转载地址:http://xoynm.baihongyu.com/

你可能感兴趣的文章
Centos6.6安装mysql记录
查看>>
OCP读书笔记(5) - 使用RMAN创建备份
查看>>
java的接口和抽象类区别
查看>>
能够提高PHP的性能的一些注意事项
查看>>
020-请你说一说app测试的工具
查看>>
软件测试2019:第五次作业—— 安全测试(含安全测试工具实验)
查看>>
SSM框架搭建总结(2)
查看>>
Python学习(19)正则表达式
查看>>
PHP中空字符串、0、null、empty和false之间的关系
查看>>
【深度学习篇】---CNN和RNN结合与对比,实例讲解
查看>>
201771010126 王燕《面向对象程序设计(Java)》第十二周学习总结
查看>>
XAML实例教程系列 - 资源(Resources)
查看>>
LWIP互联网资料汇总
查看>>
外贸术语
查看>>
网络传输流量控制策略小结
查看>>
上传大文件
查看>>
Mybatis面试集合(转)
查看>>
分布式系统的完整介绍(一)
查看>>
考点1
查看>>
Asp.net 程序连接orcle如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,...
查看>>