Linux系统下UDP发送和接收广播消息小例子
- // 发送端
- #include <iostream>
- #include <stdio.h>
- #include <sys/socket.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <netdb.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #include <string.h>
- using namespace std;
- int main()
- {
- setvbuf(stdout, NULL, _IONBF, 0);
- fflush(stdout);
- 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[] = {"abcdef"};
- int ret=sendto(sock, smsg, strlen(smsg), 0, (sockaddr*)&addrto, nlen);
- if(ret<0)
- {
- cout<<"send error...."<<ret<<endl;
- }
- else
- {
- printf("ok ");
- }
- }
- return 0;
- }
- // 接收端 http://blog.csdn.net/robertkun
- #include <iostream>
- #include <stdio.h>
- #include <sys/socket.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <netdb.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #include <string.h>
- using namespace std;
- int main()
- {
- setvbuf(stdout, NULL, _IONBF, 0);
- fflush(stdout);
- // 绑定地址
- struct sockaddr_in addrto;
- bzero(&addrto, 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;
- bzero(&from, sizeof(struct sockaddr_in));
- from.sin_family = AF_INET;
- from.sin_addr.s_addr = htonl(INADDR_ANY);
- from.sin_port = htons(6000);
- 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,(socklen_t*)&len);
- if(ret<=0)
- {
- cout<<"read error...."<<sock<<endl;
- }
- else
- {
- printf("%s\t", smsg);
- }
- sleep(1);
- }
- return 0;
- }
自已在Linux虚拟机下测试可以成功, 前提是要把主机设置在同一网段内, 还有就是不要忘记关闭Linux的防火墙.. 可以使用setup命令进行设置。
(我在测试的时候只能发送不收接收,折磨了我半天,后来才想到是Linux防火墙的问题。。)
关于虚拟机的网卡配置,建议选择桥接模式。NAT的模式的话,是受限制的,可能会收不到广播消息。
具体的参考网上的文章吧。。
祝你成功。。
Linux系统下UDP发送和接收广播消息小例子的更多相关文章
- Linux系统下UDP发送和接收广播消息小样例
[cpp] view plaincopy // 发送端 #include <iostream> #include <stdio.h> #include <sys/sock ...
- linux系统下邮件的发送
在linux系统下发送邮件一般都要要求本地的机器必须安装和启动Sendmail服务,配置非常麻烦,而且会带来不必要的资源占用. 其实我还可以安装mailx软件,通过修改配置文件可以使用外部SMTP服务 ...
- Linux系统下DHCP服务安装部署和使用详解
一.概述 DHCP :动态主机设置协议(英语:Dynamic Host Configuration Protocol,DHCP)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:用于内部网或 ...
- 在Linux系统下mail命令的用法
在Linux系统下mail命令的测试 1. 最简单的一个例子: mail -s test admin@aispider.com 这条命令的结果是发一封标题为test的空信给后面的邮箱,如果你有mta并 ...
- 使用 ipmitool 实现 Linux 系统下对服务器的 ipmi 管理
http://www.ibm.com/developerworks/cn/linux/l-ipmi/ 1.简介 IPMI(Intelligent Platform Management Interfa ...
- Linux系统下安装Redis和Redis集群配置
Linux系统下安装Redis和Redis集群配置 一. 下载.安装.配置环境: 1.1.>官网下载地址: https://redis.io/download (本人下载的是3.2.8版本:re ...
- Linux系统下如何优雅地关闭Java进程?
资料出处: http://www.sohu.com/a/329564560_700886 https://www.cnblogs.com/nuccch/p/10903162.html 前言 Linux ...
- Linux 系统下安装 rz/sz 命令及使用说明
Linux 系统下安装 rz/sz 命令及使用说明 rz/sz命令,实现将本地的文件上传到服务器或者从服务器上下载文件到本地,但是很多Linux系统初始并没有这两个命令,以下为安装和使用的具体步骤: ...
- 深入理解linux系统下proc文件系统内容
深入理解linux系统下proc文件系统内容 内容摘要:Linux系统上的/proc目录是一种文件系统,即proc文件系统. Linux系统上的/proc目录是一种文件系统,即proc文件系统.与其它 ...
随机推荐
- oracle周数计算方法
从星期天开始起算 Function Fn_GetWeekbyDate(P_Date Varchar2) Return Varchar2 Is Begin Return To_char(To_Date( ...
- JAVA JDK 1.6 API中文版.CHM打开chm提示,“ 已取消到该网页的导航”
JAVA JDK 1.6 API中文版.CHM打开chm提示,“ 已取消到该网页的导航” silent fish 装了win7后,打开chm文件,发现很多在xp系统打开正常的chm文件竟然出现问题, ...
- JavaScript HTML DOM - 改变CSS
JavaScript HTML DOM - 改变CSS HTML DOM 允许 JavaScript 改变 HTML 元素的样式. 改变 HTML 样式 如需改变 HTML 元素的样式,请使用这个语法 ...
- 获取Enum的扩张方法。
public static class EnumExtention { /// <summary> /// 获取枚举的描述信息 /// </summary> /// <t ...
- H5中需要掌握的 ANIMATION 动画效果
CSS3的动画在PC网页上或者APP上用得越来越多,比如H5页面的应用,目前在营销传播上的意义比较大,还有企业官网或者APP主要介绍也用得比较多,当然还有很多地方都用到.所以学习css的动画也迫在眉睫 ...
- php之购物车类思路及代码
<?php /* 购物车类 1.整站范围内,购物车--全局有效 解决:把购物车的信息,放在session里 2.既然全局有效,购物车的实例只有一个 解决:单例模式 技术选型:session+单例 ...
- linux安装时提示发生不正常错误问题
跳过md5系统较检(每个系统版本都有一个md5编码唯一) 在安装CentOS时 提示 找不到磁盘,是否安装程序,选择安装程序进行"下一步" 提示: 发生不规则,不正常错误 原因:没 ...
- Android Fragment基础及使用
同一个app内的界面切换 用Fragment比较合适,因为Activity比较重量级 Fragment 轻量级,切换灵活 --------------------------------------- ...
- CentOS 6.3 卷组挂载硬盘教程 linux的VPS如何分区
XEN架构VPS提供的容量一般都不会低于10G,但大部分基于Xensystem面板的VPS默认挂载10G硬盘(第一磁盘),剩下的容量(第二磁盘)就需要通过手动挂载才能扩充默认的10G容量了.默认装完系 ...
- 【RabbitMQ】 Routing
Routing 之前的章节里我们构建了一个简单的日志系统.我们可以广播所有的日志消息给所有的接收端. 本节我们将给它添加一个新特性 - 我们将允许只订阅一个消息的子集.例如,我们只将关键的错误消息定位 ...