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. CentOS修改主机名hostname

    方法一:即时生效,重启后失效 hostname 新主机名 方法二:永久生效 1.修改/etc/hosts vim /etc/hosts 127.0.0.1 localhost 新主机名 2.修改/et ...

  2. iBatis 的修改一个实体

    Student.xml <update id="updateStudent" parameterClass="Student" > UPDATE S ...

  3. WPF TextElement内容模型简介(转)

    本内容模型概述描述了 TextElement 支持的内容. Paragraph 类是 TextElement 的类型. 内容模型描述哪些对象/元素可以包含在其他对象/元素中. 本概述汇总了派生自 Te ...

  4. php_curl扩展在WINDOWS2003上如何添加

    一.使用星外PHP安装后 二.修改环境变量,PATH: c:\php;c:\php\ext;%SystemRoot%\system32;

  5. IIViewDeckController的使用,左右拖拉菜单效果实现

    博客园   IIViewDeckController的使用,左右拖拉菜单效果实现   很多应用里面都实现了对应的侧拉 显示隐藏的效果,看起来很符合用户体验的类似于这种   看起来很好看,今天去晚上搜下 ...

  6. hdoj 1892(二维树状数组)

    Problem H Time Limit : 5000/3000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Sub ...

  7. Proxy 模式

    在以下集中情况下可以用 Proxy模式解决问题: 1)创建开销大的对象时候,比如显示一幅大的图片,我们将这个创建的过程交给代理去完成,GoF 称之为虚代理(Virtual Proxy): 2)为网络上 ...

  8. 安装完 MySQL 后必须调整的 10 项配置

    原文出处: mysqlperformanceblog   译文出处:开源中国   欢迎分享原创到伯乐头条 当我们被人雇来监测MySQL性能时,人们希望我们能够检视一下MySQL配置然后给出一些提高建议 ...

  9. yii2源码学习笔记(六)

    Behvaior类,Behavior类是所有事件类的基类: 目录yii2\base\Behavior.php <?php /** * @link http://www.yiiframework. ...

  10. Python自动化运维之23、Dom

    文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式.最为关心的是,DOM把网页 ...