广播技术

广播技术:

  ARP(Address Resolution Protocol)和NTP(Network Time Protocol)都属于广播通信。

   ARP是局域网中的地址解析协议,利用这个协议,可以找出IP地址到MAC地址的映射关系。当主机A准备与主机B通信时,如果只知道主机B的IP地址,则主机A向整个全网发送一个ARP请求,询问IP地址为XXXX的主机,如果主机B收到就会产生回应。

  NTP是网络时间协议。在支持广播的局域网中设置NTP协议,可以使NTP服务器每隔一个固定的时间间隔,就向全网发送时间信息,客户端在收到时间信息后进行更新处理。

原理解析:

  要进行广播通信,首先要理解广播地址。在IP地址中,如果最后一个数字是255,则一定是一个广播地址。

?网络广播地址:网络广播地址在没有进行子网划分的网络内广播,由于当强的网络均涉及子网划分,故此种地址很少存在
?受限广播地址:以255.255.255.255组成的广播地址,在当前路由器均不转发此类广播
?子网广播地址:子网广播地址是一种常用的广播方式,它是指在一个具体的子网内进行广播,比如192.168是网络ID,那么192.168.1.255就是子网192.168.1的广播
?全部子网广播地址:是指所有子网络的广播,以上一个为例,全部子网广播地址是192.168.255.255

广播要采用UDP的方式,具体流程如下:

1.创建UDP套接字
2.设置套接字属性为SO_BROADCAST,设置为广播地址
3.设置广播地址为INADDR_BROADCAST,同时也要指定发送端口
4.进行数据收发操作
例子:

//bserver.c
#include <sys/types.h>
#include <stdio.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <string.h>
#include <netdb.h>
#include <errno.h>

#define BUFFSIZE 200
#define PORT 5050

int main(int argc, char **argv)
{
    int serversocket;
    struct sockaddr_in serveraddress,clientaddress;
   
    int so_broadcast=1;

if((serversocket=socket(AF_INET,SOCK_DGRAM,0))<0){
        perror("socket");
        return 0;
    }
   
    if(setsockopt(serversocket,SOL_SOCKET,SO_BROADCAST,&so_broadcast,sizeof(so_broadcast))<0){
        perror("setsockopt");
        return 0;
    }
   
    serveraddress.sin_family=AF_INET;
    serveraddress.sin_port=htons(INADDR_ANY);
    serveraddress.sin_addr.s_addr=htonl(INADDR_BROADCAST);
   
    if(bind(serversocket,(struct sockaddr*)&serveraddress,sizeof(struct sockaddr))<0){
        perror("bind");
        return 0;
    }
   
    clientaddress.sin_family=AF_INET;
    clientaddress.sin_port=htons(PORT);
    clientaddress.sin_addr.s_addr=htonl(INADDR_BROADCAST);
   
    while(1){
        char buf[BUFFSIZE];
        printf("please input your word:");
        scanf("%s",buf);
        if(sendto(serversocket,buf,strlen(buf),0,(struct sockaddr*)&clientaddress,sizeof(clientaddress))<0){
            perror("sendto");
            return 0;
        }
        else
            printf("send msg: %s\n",buf);
    }
   
    return 0;
}
//bclient.c
#include <sys/types.h>
#include <stdio.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <string.h>
#include <netdb.h>
#include <errno.h>

int main(int argc, char **argv)
{
    int clientsocket;
    struct sockaddr_in serveraddress,clientaddress;
   
    clientsocket=socket(AF_INET,SOCK_DGRAM,0);
   
    serveraddress.sin_family=AF_INET;
    serveraddress.sin_port=htons(5050);
    serveraddress.sin_addr.s_addr=htonl(INADDR_ANY);
   
    int opt=1;
    if(setsockopt(clientsocket,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt))<0){
        perror("setsockopt");
        return 0;
    }
   
    if(bind(clientsocket,(struct sockaddr*)&serveraddress,sizeof(struct sockaddr))!=0){
        perror("bind");
        return 0;
    }
   
    char buf[200];
   
    while(1){
        memset(buf,0,200);
        int size=0;
        size=recvfrom(clientsocket,buf,200,0,(struct sockaddr*)&serveraddress,sizeof(serveraddress));
        buf[size]=‘\0‘;
        printf("IP:%s msg:%s\n",inet_ntoa(clientaddress.sin_addr),buf);
       
        if(strcmp(buf,"quit")==0){
            printf("system quit!\n");
            close(clientsocket);
            return 0;
        }
    }
   
    return 0;
}

时间: 2024-08-08 05:22:47

广播技术的相关文章

IPV6技术系列②——IPv6地址配置

IPv6简介 IPv6即 Internet Protocol Version 6,为IP协议的下一代版本.IPv6是IETF(互联网工程任务组,Internet Engineering Task Force)设计的用于替代目前广泛使用的IPv4的下一代IP协议,有着"可以为世界每一粒沙子分配一个网址"的盛名.由于IPv4在网络地址范围极为有限,严重限制了互联网的应用和发展.这种矛盾在5G.物联网等新兴技术即将流行的今天尤为突出.而IPv6的使用,不仅能解决网络地址资源短缺的问题,同时也

Scratch高阶编程之克隆技术再研究

一.引言 克隆技术是时下热门的Scratch少儿编程考试或者竞赛必须面对的重点与难点之一.本文试图从较高的层面探讨Scratch编程中克隆技术的本质,并进一步把克隆技术的应用划分为两大类型--共享数据克隆体和非共享数据克隆体,最后给出各自的应用举例. 对于初.高中对面向对象编程概念没有基础的小朋友,可以略过本注释的阅读转而进行第二小节的阅读.熟悉其他高级编程语言的朋友都了解面向对象编程,其三种特征(封装.继承与多态)都在Scratch中得到非常自然与形象的体现.在此暂不赘述,有兴趣的朋友可多多联

Java面试14|Session与Cookie

1.在分布式环境,管理Session通常使用下面三种方式: (1)Session Replication 方式管理 (即session复制) 将一台机器上的Session数据广播复制到集群中其余机器上 使用场景:机器较少,网络流量较小 优点:实现简单.配置较少.当网络中有机器Down掉时不影响用户访问 缺点:广播式复制到其余机器有一定廷时,带来一定网络开销 tomcat自带的基于tcp广播技术的集群 (2)Session Sticky 方式管理 即粘性Session.当用户访问集群中某台机器后,

Atitit JAVA&#160;p2p设计与总结 &#160;JXTA 2

Atitit JAVA p2p设计与总结  JXTA 2 JXTA 2 是开放源代码 P2P 网络的第二个主要版本,它利用流行的.基于 Java 的参考实现作为构建基础.在设计方面进行了重要的修改,以获得更高的性能.海量伸缩性和可维护的 P2P 网络.本文建立在 Sing Li 于两年前发表的 JXTA 系列文章 Makng P2P interoperable的基础上,为您介绍了这个平台上最新的重要改变 JXTA具体来说是一种标准组件平台,它提供了用于开发分布式服务和应用程序的基本组件.整套技术

WANL标准组织介绍-02

无线电管理委员会 FCC ETSI IEEE Wi-Fi IETF WAPI 国家无线电管理委员会认证 国家无线电管理委员会认证(State Radio Regulatory Commission of the People’s Republic of China) 自 1999 年 6 月 1 日起,中国信息产业部 (Ministry of Information Industry, MII)强制规定,所有在中国境内销售及使用的无线电组件产品,必须取得无线电型号的核准认证 (Radio Typ

光纤与PON基础概念整理

近期有幸接触到通讯这一领域,此文专门用于整理记录. 首先是光纤与光缆 光纤(OpticalFiber,OF)是用来导光的透明介质纤维,一根有用化的光纤是由多层透明介质构成,一般能够分为三部分:折射率较高的纤芯.折射率较低的包层和外面的涂覆层,纤芯材质主要为SiO2 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

好利獲得(意大利电信集团)

好利獲得(意大利语:Olivetti S.p.A.),意大利资讯科技公司,成立于1908年,专门研发和出品商业器材和电脑系统.目前母公司为意大利电信. 历史 公司成立于1908年,以生产打字机起家.其后不断扩张,于1930年代,业务扩至二十多个国家.1940年代起进军电子计算机业务,并于1948年推出公司第一部桌面计算机.1959年研发出国家第一部电脑Elea 9003.其间仍有生产打字机. 1982年推出公司首部现代化个人电脑M20:1983年推出M24,首次配备英特尔中央处理器.后来因策略太

用JAVA实现P2P网络通信

一. 前言     P2P(Peer-to-Peer 端到端)模型是与C/S(客户/服务器)模型相对应.基于C/S的用户间通信需要由服务器中转,在C/S中的服务器故障将导致整个网络通信的瘫痪..而基于P2P的用户间通信则是直接通信,去掉了服务器这一层,带来的显著优点是通信时没有单一的失败点,一个用户的故障不会影响整个P2P网络.本文提供了一种用JAVA实现P2P网络通信的方法. 二.P2P通信的关键技术分析 1.P2P通信模型 在P2P网络中,任意两个端点之间可实现直接通信.在基于C/S的网络中

ElasticSearch 学习笔记一 简介

一.Lucene简介 A.Lucene的总体架构 1.文档(document):索引与搜索的主要数据载体,它包含一个或多个字段,存放将要写入索引或将从索引搜索出来的数据. 2.字段(field): 文档的一个片段,它包含两个部分: 字段的名称和内容. 3.词项(term):搜索的一个单位,代表文本中的某个词. 4.词条(token): 词项在字段中的一次出现,包括词项的文本.开始和结束的位置以及类型. Apache Lucene将写入索引的所有信息组织成一种名为倒排索引(inverted ind