【Socket】linux广播技术
1.mystery引入
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广播技术相关推荐
- 红帽Linux故障定位技术详解与实例(1)
红帽Linux故障定位技术详解与实例(1) 2011-09-28 14:26 圈儿 BEAREYES.COM 我要评论(0) 字号:T | T 在线故障定位就是在故障发生时, 故障所处的操作系统环境仍 ...
- linux 中级 教程pdf,Linux初中级学习者指导Linux操作系统技术合集.pdf
红联的个人空间 Linux操作系统技术合集 作者:红联 Linux操作系统技术合 集 ─────Linux初, 中级学习者教程 Linux有些神奇,有人就这么说,Linux有些意思,我想尝尝,尚末安装 ...
- linux套接字端口,多端口监听套接字linux(multiport listening socket linux)
多端口监听套接字linux(multiport listening socket linux) 我正在用C(linux)编写一个多线程服务器应用程序,它必须监听2个不同的端口号,例如监听端口号3000 ...
- [转] Windows完成端口与Linux epoll技术简介
Windows完成端口与Linux epoll技术简介 2008-01-03 16:18 WINDOWS完成端口编程1.基本概念 2.WINDOWS完成端口的特点 3.完成端口(Completion ...
- Linux编程技术总结
前言 所谓Linux编程技术就是在Linux操作系统环境下进行软件开发时所使用的各种编程技术. 一 常见的Linux系统发行版 在介绍常见的 Linux 系统版本之前,首先需要区分 Linux 系统内 ...
- linux bonding 技术
文章目录 背景 简介 目录 1. Bonding驱动简介 1.1 配置并编译支持bonding的内核 1.2 安装ifenslave控制工具 2. Bonding驱动选项 3. 配置Bonding设备 ...
- linux 网络管理技术
linux 网络管理技术 OSI七层模型和TCP/IP四层模型 OSI 七层模型:OSI(Open System Interconnection)开放系统互连参考模型是国际标准化组织(ISO)制定的一 ...
- Windows完成端口与Linux epoll技术简介
WINDOWS完成端口编程 1 1.基本概念 1 2.WINDOWS完成端口的特点 2 3.完成端口(Completion Ports )相关数据结构和创建 2 4.完成端口线程的工作原理 4 5.W ...
- 预测汽车级Linux专业技术的需求
预测汽车级Linux专业技术的需求 Anticipating need for Automotive Grade Linux expertise 在听了多年汽车级Linux(AGL)及其所有潜力之后, ...
最新文章
- Dijkstra算法的粗略学习
- Oracle HA 之 oracle 11.2 rac库配置active dataguard
- Java 8 的List<V> 转成 Map<K, V>
- OneNand、Nand和Nor三种Flash的区别
- java算法之希尔排序
- 项目“”受源代码管理,向源代码管理注册此项目时出错。。
- oracle浅析导致数据库性能问题的常见原因
- CPU指令系统寻址方式
- LaTeX 切换其它另外的期刊会议模板
- springboot仓库管理系统的设计与实现(含论文)
- 在Google上做搜索引擎优化 (SEO),最重要的是哪几点?
- 小程序报错 出现脚本错误或者未正确调用 Page()
- 关于跳转页面报404、500错误设置自定义图片和文字
- 钛资本研究院:科技创投,ToB也性感
- WebMagic爬取码市、猪八戒、一品威客外包数据
- python多级菜单_多级菜单.py
- 什么是数字式KVM远程管理功能
- 微信小程序图片放大预览效果的实现,轮播图点击放大预览
- 多项式回归(PolynomialFeatures)
- [Codevs] 一塔湖图