1. // 发送端
  2. #include <iostream>
  3. #include <stdio.h>
  4. #include <sys/socket.h>
  5. #include <unistd.h>
  6. #include <sys/types.h>
  7. #include <netdb.h>
  8. #include <netinet/in.h>
  9. #include <arpa/inet.h>
  10. #include <string.h>
  11. using namespace std;
  12. int main()
  13. {
  14. setvbuf(stdout, NULL, _IONBF, 0);
  15. fflush(stdout);
  16. int sock = -1;
  17. if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
  18. {
  19. cout<<"socket error"<<endl;
  20. return false;
  21. }
  22. const int opt = 1;
  23. //设置该套接字为广播类型,
  24. int nb = 0;
  25. nb = setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *)&opt, sizeof(opt));
  26. if(nb == -1)
  27. {
  28. cout<<"set socket error..."<<endl;
  29. return false;
  30. }
  31. struct sockaddr_in addrto;
  32. bzero(&addrto, sizeof(struct sockaddr_in));
  33. addrto.sin_family=AF_INET;
  34. addrto.sin_addr.s_addr=htonl(INADDR_BROADCAST);
  35. addrto.sin_port=htons(6000);
  36. int nlen=sizeof(addrto);
  37. while(1)
  38. {
  39. sleep(1);
  40. //从广播地址发送消息
  41. char smsg[] = {"abcdef"};
  42. int ret=sendto(sock, smsg, strlen(smsg), 0, (sockaddr*)&addrto, nlen);
  43. if(ret<0)
  44. {
  45. cout<<"send error...."<<ret<<endl;
  46. }
  47. else
  48. {
  49. printf("ok ");
  50. }
  51. }
  52. return 0;
  53. }
  1. // 接收端 http://blog.csdn.net/robertkun
  2. #include <iostream>
  3. #include <stdio.h>
  4. #include <sys/socket.h>
  5. #include <unistd.h>
  6. #include <sys/types.h>
  7. #include <netdb.h>
  8. #include <netinet/in.h>
  9. #include <arpa/inet.h>
  10. #include <string.h>
  11. using namespace std;
  12. int main()
  13. {
  14. setvbuf(stdout, NULL, _IONBF, 0);
  15. fflush(stdout);
  16. // 绑定地址
  17. struct sockaddr_in addrto;
  18. bzero(&addrto, sizeof(struct sockaddr_in));
  19. addrto.sin_family = AF_INET;
  20. addrto.sin_addr.s_addr = htonl(INADDR_ANY);
  21. addrto.sin_port = htons(6000);
  22. // 广播地址
  23. struct sockaddr_in from;
  24. bzero(&from, sizeof(struct sockaddr_in));
  25. from.sin_family = AF_INET;
  26. from.sin_addr.s_addr = htonl(INADDR_ANY);
  27. from.sin_port = htons(6000);
  28. int sock = -1;
  29. if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
  30. {
  31. cout<<"socket error"<<endl;
  32. return false;
  33. }
  34. const int opt = 1;
  35. //设置该套接字为广播类型,
  36. int nb = 0;
  37. nb = setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *)&opt, sizeof(opt));
  38. if(nb == -1)
  39. {
  40. cout<<"set socket error..."<<endl;
  41. return false;
  42. }
  43. if(bind(sock,(struct sockaddr *)&(addrto), sizeof(struct sockaddr_in)) == -1)
  44. {
  45. cout<<"bind error..."<<endl;
  46. return false;
  47. }
  48. int len = sizeof(sockaddr_in);
  49. char smsg[100] = {0};
  50. while(1)
  51. {
  52. //从广播地址接受消息
  53. int ret=recvfrom(sock, smsg, 100, 0, (struct sockaddr*)&from,(socklen_t*)&len);
  54. if(ret<=0)
  55. {
  56. cout<<"read error...."<<sock<<endl;
  57. }
  58. else
  59. {
  60. printf("%s\t", smsg);
  61. }
  62. sleep(1);
  63. }
  64. return 0;
  65. }

自已在Linux虚拟机下测试可以成功, 前提是要把主机设置在同一网段内, 还有就是不要忘记关闭Linux的防火墙.. 可以使用setup命令进行设置。

(我在测试的时候只能发送不收接收,折磨了我半天,后来才想到是Linux防火墙的问题。。)

关于虚拟机的网卡配置,建议选择桥接模式。NAT的模式的话,是受限制的,可能会收不到广播消息。

具体的参考网上的文章吧。。

祝你成功。。

Linux系统下UDP发送和接收广播消息小例子的更多相关文章

  1. Linux系统下UDP发送和接收广播消息小样例

    [cpp] view plaincopy // 发送端 #include <iostream> #include <stdio.h> #include <sys/sock ...

  2. linux系统下邮件的发送

    在linux系统下发送邮件一般都要要求本地的机器必须安装和启动Sendmail服务,配置非常麻烦,而且会带来不必要的资源占用. 其实我还可以安装mailx软件,通过修改配置文件可以使用外部SMTP服务 ...

  3. Linux系统下DHCP服务安装部署和使用详解

    一.概述 DHCP :动态主机设置协议(英语:Dynamic Host Configuration Protocol,DHCP)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:用于内部网或 ...

  4. 在Linux系统下mail命令的用法

    在Linux系统下mail命令的测试 1. 最简单的一个例子: mail -s test admin@aispider.com 这条命令的结果是发一封标题为test的空信给后面的邮箱,如果你有mta并 ...

  5. 使用 ipmitool 实现 Linux 系统下对服务器的 ipmi 管理

    http://www.ibm.com/developerworks/cn/linux/l-ipmi/ 1.简介 IPMI(Intelligent Platform Management Interfa ...

  6. Linux系统下安装Redis和Redis集群配置

    Linux系统下安装Redis和Redis集群配置 一. 下载.安装.配置环境: 1.1.>官网下载地址: https://redis.io/download (本人下载的是3.2.8版本:re ...

  7. Linux系统下如何优雅地关闭Java进程?

    资料出处: http://www.sohu.com/a/329564560_700886 https://www.cnblogs.com/nuccch/p/10903162.html 前言 Linux ...

  8. Linux 系统下安装 rz/sz 命令及使用说明

    Linux 系统下安装 rz/sz 命令及使用说明 rz/sz命令,实现将本地的文件上传到服务器或者从服务器上下载文件到本地,但是很多Linux系统初始并没有这两个命令,以下为安装和使用的具体步骤: ...

  9. 深入理解linux系统下proc文件系统内容

    深入理解linux系统下proc文件系统内容 内容摘要:Linux系统上的/proc目录是一种文件系统,即proc文件系统. Linux系统上的/proc目录是一种文件系统,即proc文件系统.与其它 ...

随机推荐

  1. css考核点整理(十三)-jpg/png/gif等图片类型区别

    jpg/png/gif等图片类型区别

  2. Android Studio下添加引用jar文件和so文件

    博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 博客园: 追风917 安卓开发中我们常会遇到jar文件和so文件的引用,下面介绍下在as下如何添加使用,这里以百度地图s ...

  3. IsPostBack and DropdownList.

    Encounted the issue accident when helping my classmate dealing with his homework assignment,it turns ...

  4. os项目icon和default 等相关图标命名规则和大小设置

    最新的参考apple官网地址:https://developer.apple.com/library/ios/qa/qa1686/_index.html,网页下面有详细的使用方法(ios7以后的) 转 ...

  5. JSP JS 日期控件的下载、使用及注意事项

    网上流行的时间日期控件比较多,个人觉得My97DatePicker的日期控件不错,值得推荐. 具体的使用过程如下: 1.下载My97DatePicker.rar或 My97DatePickerBeta ...

  6. OpenGL光源位置

    一.OpenGL光源简介 OpenGL提供了多种形式的光源,如点光源.平行光源和聚光灯光源等.所有光源都使用 glLight*接口来设置光源属性,其中包括 glLight{if} 和 glLight{ ...

  7. javascript——可以判断值的类型的函数

    function classof(o){ return Object.prototype.toString.call(0).slice(8,-1); } Function.prototype.getN ...

  8. filter过滤器执行顺序

    浏览器请求---->进入过滤器---->进入doFilter方法--->执行chain.doFilter()方法就会放行----->进入业务逻辑方法------>进入过滤 ...

  9. python3 读取大文件分解成若干小文件

    有个数据实在太大了,有1.7G,打开慢,改文件也慢,我们将其分解成若干个中等文件 #!/usr/bin/env python3 # -*- coding: utf-8 -*-   f = open(& ...

  10. 数组去重的三种方法及from方法

    直接上代码: var str="adbbckddwerivka"; var arr=str.split(""); console.log(arr); //ind ...