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. oo面向对象原则

    1.单一职责原则 一个类,最好只做一件事,只有一个引起他变化的原因否则就应该考虑重构. 2.开放封闭原则 软件实体应该是可扩展的,而不是可修改的.也就是说对扩展开放,对修改封闭.主要体现在两个方面: ...

  2. MyTask2

    先把核心代码贴上 public void solve() { //Console.WriteLine("请输入你需要生成多少人的数据以及年龄最大值(75以内):"); //int ...

  3. move file create directory.

    If we want to move file to the directory that does not exist,and if we perform a File.Move,it will r ...

  4. 【转】IOS 30多个iOS常用动画,带详细注释

    原文: http://blog.csdn.net/zhibudefeng/article/details/8691567 CoreAnimationEffect.h 文件 // CoreAnimati ...

  5. iOS 里面如何使用第三方应用程序打开自己的文件,调用wps其他应用打开当前应用里面的的ppt doc xls

    我们的自己的应用里面经常涉及的要打开ppt doc,这样的功能,以前总以为iOS沙盒封闭化,不可能实现,后来终于解决了 使用 UIDocumentInteractionController 来解决这一 ...

  6. c# web 删除时弹出提示框

    方法1: 在控件中增加属性 <asp:Button ID="btnSub" runat="server" Text="提交" oncl ...

  7. VisualStudio2013内置SQLServer入门

    最近做项目老大要求用到sqlserver,但是这项目的数据库只是本地演示用并不复杂,于是决定试试VisualStudio2013内置的SQLServer.对于这个东西的了解并没有多少,然后项目初学习的 ...

  8. 获取当前页面的url

    var url = window.location.href; var b = url.substring(url.lastIndexOf('/')+1, url.length);

  9. java编码转化方案-备用

    import java.io.UnsupportedEncodingException; /** * 转换字符串的编码 */ public class changeCharSet { /** 7位AS ...

  10. FileReader上传图片

    实现拖拽图片,在上传至服务器前,显示图片并操控大小 利用HTML5 dragenter dragover dragleave drop 在实现图片显示方面,用了FileReader这个类 var fi ...