1.mystery引入

 

1)本学期学的ARP协议和NTP协议都属于广播技术的实现,所以借此机会了解下广播技术的底层原理
   2)在IP地址中,如果最后一个数字为255,则一定是一个广播地址
   3)广播地址分为网络广播地址/受限广播地址/子网广播地址和全部子网广播地址
   4)在设计广播程序时,要进行套接字的属性设置
   5)广播通信要采用UDP的方式
   6)广播套接字的属性为SO_BROADCAST
   7)广播地址为INADDR_BROADCAST,同时也要指定发送的端口


2.实例操作

 

1)实现一个基于C/S模式的广播通信,服务器端程序负责创建广播组,并提供一个键盘输入接口,输入的信息向组内成员广播发送
   2)客户端加入广播组,接收服务端的信息并显示,若发现信息中包含quit,则退出程序
   3)源代码
服务器端:

//serverbroad.c
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netdb.h>
#include <errno.h>
#define BUFFSIZE
#define PORT 5050
int main()
{int serversocket;struct sockaddr_in serveraddress,clientaddress;int so_broadcast = 1;socklen_t size;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[200];printf("please input your word:>");scanf("%s",buf);if((sendto(serversocket,buf,strlen(buf),0,(struct sockaddr *)&clientaddress,sizeof(clientaddress))) < 0){perror("sendto error");return 0;}elseprintf("send msg %s\n",buf);}return 0;
}

客户端:

//clientbroad.c
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netdb.h>
#include <errno.h>
int main()
{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:SO_REUSEADDR");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(serveraddress.sin_addr),buf);if(strcmp(buf,"quit") == 0){printf("system quit!!!!\n");close(clientsocket);return 0;}}return 0;
}

 


3.mystery注解

1)效果如图

2)由图可以看出,这个程序并没有成功,因为广播组内的成员并没有收到广播消息
   3)mystery尝试查找问题所在原因,但是在源代码中没有找出错误,纠结


4.mystery调

 

1)上网查证了下,对源代码进行了部分改动
   2)广播要点:广播目的端口一定要和接收者监听的端口一致
   3)在防火墙中允许广播

4)经过调试,还是未成功,不过广播和组播的原理就是这样,估计是系统的原因。纠结……

本文出自 “成鹏致远” 博客,请务必保留此出处http://infohacker.blog.51cto.com/6751239/1155115

【Socket】linux广播技术相关推荐

  1. 红帽Linux故障定位技术详解与实例(1)

    红帽Linux故障定位技术详解与实例(1) 2011-09-28 14:26 圈儿 BEAREYES.COM 我要评论(0) 字号:T | T 在线故障定位就是在故障发生时, 故障所处的操作系统环境仍 ...

  2. linux 中级 教程pdf,Linux初中级学习者指导Linux操作系统技术合集.pdf

    红联的个人空间 Linux操作系统技术合集 作者:红联 Linux操作系统技术合 集 ─────Linux初, 中级学习者教程 Linux有些神奇,有人就这么说,Linux有些意思,我想尝尝,尚末安装 ...

  3. linux套接字端口,多端口监听套接字linux(multiport listening socket linux)

    多端口监听套接字linux(multiport listening socket linux) 我正在用C(linux)编写一个多线程服务器应用程序,它必须监听2个不同的端口号,例如监听端口号3000 ...

  4. [转] Windows完成端口与Linux epoll技术简介

    Windows完成端口与Linux epoll技术简介 2008-01-03 16:18 WINDOWS完成端口编程1.基本概念 2.WINDOWS完成端口的特点 3.完成端口(Completion ...

  5. Linux编程技术总结

    前言 所谓Linux编程技术就是在Linux操作系统环境下进行软件开发时所使用的各种编程技术. 一 常见的Linux系统发行版 在介绍常见的 Linux 系统版本之前,首先需要区分 Linux 系统内 ...

  6. linux bonding 技术

    文章目录 背景 简介 目录 1. Bonding驱动简介 1.1 配置并编译支持bonding的内核 1.2 安装ifenslave控制工具 2. Bonding驱动选项 3. 配置Bonding设备 ...

  7. linux 网络管理技术

    linux 网络管理技术 OSI七层模型和TCP/IP四层模型 OSI 七层模型:OSI(Open System Interconnection)开放系统互连参考模型是国际标准化组织(ISO)制定的一 ...

  8. Windows完成端口与Linux epoll技术简介

    WINDOWS完成端口编程 1 1.基本概念 1 2.WINDOWS完成端口的特点 2 3.完成端口(Completion Ports )相关数据结构和创建 2 4.完成端口线程的工作原理 4 5.W ...

  9. 预测汽车级Linux专业技术的需求

    预测汽车级Linux专业技术的需求 Anticipating need for Automotive Grade Linux expertise 在听了多年汽车级Linux(AGL)及其所有潜力之后, ...

最新文章

  1. Dijkstra算法的粗略学习
  2. Oracle HA 之 oracle 11.2 rac库配置active dataguard
  3. Java 8 的List<V> 转成 Map<K, V>
  4. OneNand、Nand和Nor三种Flash的区别
  5. java算法之希尔排序
  6. 项目“”受源代码管理,向源代码管理注册此项目时出错。。
  7. oracle浅析导致数据库性能问题的常见原因
  8. CPU指令系统寻址方式
  9. LaTeX 切换其它另外的期刊会议模板
  10. springboot仓库管理系统的设计与实现(含论文)
  11. 在Google上做搜索引擎优化 (SEO),最重要的是哪几点?
  12. 小程序报错 出现脚本错误或者未正确调用 Page()
  13. 关于跳转页面报404、500错误设置自定义图片和文字
  14. 钛资本研究院:科技创投,ToB也性感
  15. WebMagic爬取码市、猪八戒、一品威客外包数据
  16. python多级菜单_多级菜单.py
  17. 什么是数字式KVM远程管理功能
  18. 微信小程序图片放大预览效果的实现,轮播图点击放大预览
  19. 多项式回归(PolynomialFeatures)
  20. [Codevs] 一塔湖图

热门文章

  1. C#实现图标批量下载
  2. Web APi之控制器创建过程及原理解析(八)
  3. 理解并自定义HttpHandler
  4. apache 支持gzip
  5. 如何测试组件的性能?
  6. python我的世界给予物品指令_我的世界给予物品指令是什么
  7. Segment Routing — SRv6 — SRv6 协议解析
  8. Go 语言编程 — 并发 — GMP 调度模型
  9. C 语言编程 — 异常处理
  10. 一次 JVM 调优的笔记