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. Microsoft Windows Server 2008 R2 IIS7.5安装指南

    一.IIS安装步骤: 1.安装Windows Server 2008 R2(见 附录一) 2.配置计算机名称和IP地址(见 附录一) 3.配置成员服务器(见 附录一) 4.点击任务栏上的“服务器管理器 ...

  2. codevs 1817 灾后重建

    /* 暴力暴力 离线每次添边 堆优化dij 70 SPFA 80..... */ #include<iostream> #include<cstdio> #include< ...

  3. 关于es6的箭头函数使用与内部this指向

    特型介绍:箭头函数是ES6新增的特性之一,它为JS这门语言提供了一种全新的书写函数的语法. 'use strcit'; let arr = [1,2,3]; //ES5 let es5 = arr.m ...

  4. Android ListView 嵌套 ImageView,如何响应ImageView的点击和长按事件

    http://www.tuicool.com/articles/EZv2Uv 1.先说下嵌套在ListView中的ImageView如何响应点击事件 方法:在imageView中设置onClick属性 ...

  5. MySQL命令行下查看运行状态

    查看MySQL的运行状态用命令行的show语句show status是查看MySQL运行情况,和上面那种通过pma查看到的信息基本类似. show variables是查看MySQL的配置参数,还可以 ...

  6. Javascript基础(2)

    开始更咯~~~嘻嘻. ---------------------------------------------------------------------------------- 异常捕获:即 ...

  7. [LeetCode OJ] Single Number之二 ——Given an array of integers, every element appears THREE times except for one. Find that single one.

    class Solution { public: int singleNumber(int A[], int n) { ; ; ; i<=bits; i++) { ; ; ; j<n; j ...

  8. IOS下双击背景, touchmove, 阻止页面背景scroll.

    ios prevent dblclick(tap) page scrollhtml add:("minimal-ui" is very important) <meta na ...

  9. C# 窗体靠近屏幕边缘自动隐藏*学习(类似于QQ)

    using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; us ...

  10. bzoj2096: [Poi2010]Pilots

    Description Tz又耍畸形了!!他要当飞行员,他拿到了一个飞行员测试难度序列,他设定了一个难度差的最大值,在序列中他想找到一个最长的子串,任意两个难度差不会超过他设定的最大值.耍畸形一个人是 ...