linux广播


// 发送端
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
//#include <bits/socket.h> //只有UDP套接字允许广播或多播,ipv4中的多播地址范围是:224.0.0.0到239.255.255.255 int main()
{
setvbuf(stdout, NULL, _IONBF, );
fflush(stdout); int sock = -;
if ((sock = socket(AF_INET, SOCK_DGRAM, )) == -)
{
perror("socket error");
return ;
} const int opt = ;
//设置该套接字为广播类型,
int nb = ;
nb = setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *)&opt, sizeof(opt));
if(nb == -)
{
perror("set socket error...");
return ;
} 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();
int nlen=sizeof(addrto); while()
{
sleep();
//从广播地址发送消息
char smsg[] = {"abcdef"};
int ret=sendto(sock, smsg, strlen(smsg), , (struct sockaddr *)&addrto, nlen);
if(ret<)
{
perror("set socket error...");
}
else
{
printf("ok ");
}
} return ;
}
// 接收端
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h> int main()
{
setvbuf(stdout, NULL, _IONBF, );
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(); // 广播地址
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(); int sock = -;
if ((sock = socket(AF_INET, SOCK_DGRAM, )) == -)
{
perror("socket error\n");
return ;
} const int opt = ;//UDP默认不支持广播,设置该套接字为广播类型,opt = 1
int nb = ;
nb = setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *)&opt, sizeof(opt));
if(nb == -)
{
perror("set socket error\n");
return ;
} if(bind(sock,(struct sockaddr *)&(addrto), sizeof(struct sockaddr_in)) == -)
{
perror("bind error\n");
return ;
} int len = sizeof(struct sockaddr_in);
char smsg[] = {}; while()
{
//从广播地址接受消息
int ret=recvfrom(sock, smsg, , , (struct sockaddr*)&from,(socklen_t*)&len);
if(ret<=)
{
perror("recvfrom error\n");
}
else
{
printf("%s\t", smsg);
} sleep();
} return ;
}

linux广播的更多相关文章

  1. linux 广播

    广播是一台主机向局域网内的所有主机发送数据.这时,同一网段的所有主机都能接收到数据.发送广播包的步骤大致如下: (1)确定一个发送广播的接口,如eth0 (2)确定广播的地址,通过ioctl函数,请求 ...

  2. 【Socket】linux广播技术

    1.mystery引入        1)本学期学的ARP协议和NTP协议都属于广播技术的实现,所以借此机会了解下广播技术的底层原理    2)在IP地址中,如果最后一个数字为255,则一定是一个广播 ...

  3. linux 广播和组播

    广播和组播 广播,必须使用UDP协议,是只能在局域网内使用,指定接收端的IP为*.*.*.255后,发送的信息,局域网内的所有接受端就能够接到信息了. 广播的发送端代码 #include <st ...

  4. 【Socket】linux黑客之网络嗅探底层原理

      1.mystery引入 1)网络嗅探属于网络攻防类的安全软件,其基于原始套接字技术开发的 2)原始套接字是一种套接字底层技术,它工作在网络层 3)谈到网络安全,刚好本学期学过这门课程,这里myst ...

  5. Linux 驱动开发

    linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...

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

    // 发送端 #include <iostream> #include <stdio.h> #include <sys/socket.h> #include < ...

  7. linux中C语言发送广播报文

    2. 指令的解决方法: oute add -net 255.255.255.255 netmask 255.255.255.255 dev eth0 metric 1 或者 route add -ho ...

  8. ARM Linux 内核 panic 之cache 一致性 ——Cortex-A9多核cache和TLB一致性广播

    ARM Linux 内核 panic 之cache 一致性 ——Cortex-A9多核cache和TLB一致性广播 Cortex-A9的多喝CPU可以接收和执行一致性广播操作,当其使能并处于SMP模式 ...

  9. Linux IPC socket 广播,组播

    getsockopt()/setsockopt() //获得sockfd指向的socket的属性 int getsockopt(int sockfd, int level, int optname, ...

随机推荐

  1. 性能测试基础---URL和HTTP协议

    ·URL和HTTP协议: ·URL构成: URL是web应用进行资源访问的主要方式.一般来说,由五个部分构成: 示例:http://192.168.2.212/phpwind1/searcher.ph ...

  2. Mybatis分页方法

    使用方法https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md 使用 Maven 在 pom ...

  3. js里调用函数时,函数名带括号与不带括号的区别

    function test(){ return 1;}var a=test;console.log(a);//输出[Function: test]var b=test();console.log(b) ...

  4. JavaScript Array 對象

    JavaScript array 對象 array對象,是用於在單個變量中存儲多個值的一種變量類型. 創建array對象的語法: new array(); new array(size); new a ...

  5. mssql提权

    MSSQL的提权:下面是三种方法一种利用xp_cmshell组件,还有一种sp_OACreate组件,COM组件 xp_cmshell组件的开启: 1.sql2005版本以后默认为关闭状态,需要开启命 ...

  6. C1010 unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source

    提示说是预编译出现问题,提示添加头文件stdafx.h,但是添加了也会继续有其他错误解决方法: 在菜单Project->Properties(或者直接快捷键Alt+F7)->C/C++-& ...

  7. vigil rpm 包制作

    vigil 可以方便的进行服务的监控,以下尝试制作一个rpm 包,方便使用 安装依赖 ruby yum -y install ruby rubygems ruby-devel  修改gem 源 可选, ...

  8. Linux启动与停止Tomcat

    停止Tomcat: cd 切换到Tomcat的bin目录下,关闭命令:[root@localhost bin]# ./shutdown.sh 检查tomcat是否已关闭,检查命令:[root@loca ...

  9. 原创:协同过滤之ALS

    推荐系统的算法,在上个世纪90年代成型,最早应用于UserCF,基于用户的协同过滤算法,标志着推荐系统的形成.首先,要明白以下几个理论:①长尾理论②评判推荐系统的指标.之所以需要推荐系统,是要挖掘冷门 ...

  10. 再见,Eclipse。

    阅读本文大概需要 5 分钟. 来源:cnblogs.com/ouyida3/p/9901312.html 最近,改用了 IDEA,同事都说我投敌了.当然,这些同事都是和我一样的“老”程序员.不说毕业生 ...