Linux IPC socket 广播,组播
getsockopt()/setsockopt()
//获得sockfd指向的socket的属性
int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);
//设置sockfd指向的socket的属性,成功返回0,失败返回-1设errno。
int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);
level :选项级别
- SOL_SOCKET:指定设置属性在socket API层次,即通用socket选项
- IPPROTO_IP:IP选项。
- IPPROTO_TCP:TIP选项。
optname:选项名
- SO_BROADCAST:广播
optval:存放选项值的缓冲区地址
optlen:缓冲区长度
广播
广播即向当前网段的所有主机进行广播。广播的信息是在接受方的传输层才决定是否被处理,广播主机的使用当前网段的最大ip地址作为广播地址,即,xxx.xxx.xxx.255,而255.255.255.255在所有网段都是广播地址。 只有使用udp套接字才能广播,而默认设置的socket是不允许发送广播的,需要setsockopt()进行设置
模型
sockfd=soket();
...
int on = 1;
setsockopt(sockfd,SOL_SOCKKET,SO_BROADCAST,&on,sizeof(on));
...
sendto();
组播
广播在接收主机的传输层才会决定是否处理,如果很多主机都是不处理,这种广播风暴无疑会大大的占用带宽并增加主机负载。组播就可以解决既希望实现"一发多收"又不希望引起"广播风暴"的一种机制。组播就是只发消息给组内的主机,而不是网段内所有的主机。
模型
//netinet/in.h
struct ip_mreq{
struct in_addr imr_multiaddr;
struct in_addr imr_interface;
};
// 加入多播组
struct ip_mreq mreq;
bzero(&mreq,sizeof(mreq));
mreq.imr_multiaddr.s_addr=inet_addr("224.1.2.2");
mreq.imr_interface.s_addr=htonl(INADDR_ANY);
setsockopt(sockfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq));
Linux IPC socket 广播,组播的更多相关文章
- 网络编程--广播&组播
广播 1.广播地址 如果用{netid, subnetid, hostid}( {网络ID,子网ID,主机ID})表示IPv4地址.那么有四种类型的广播地址,我们用-1表示所有比特位均为1的字段: 1 ...
- Ztack学习笔记(6)-广播组播点播
Zigbee网络中进行数据通信主要有三种类型:单播.组播.广播.那这三种方式如何设置呢,在哪里设置呢, 一. 广播 当应用程序需要将数据包发送给网络的每一个设备时,使用这种模式.广播的短地址有三种 0 ...
- Linux IPC socket编程基础
头文件 #include<unistd.h> #include <sys/types.h> #include <sys/socket.h> #include< ...
- linux IPC socket(3)server简单写法
写server的一些流程总结 一.向内核申请一个socket TCP形式 sock_fd = socket(AF_INET, SOCK_STREAM, ); UDP形式 sfd = socket(AF ...
- linux IPC socket(2)
使用bind来关联地址和套接字 #include <sys/types.h> #include <sys/socket.h> int bind(int sockfd, cons ...
- linux IPC socket
套接字是通讯端点的抽象 创建一个套接字 #include <sys/types.h> #include <sys/socket.h> int socket(int domain ...
- 为何GRE可以封装组播报文而IPSEC却不行?
Author : Email : vip_13031075266@163.com Date : 2021.01.24 Copyright : 未经同意不得 ...
- 【Socket】linux组播技术
1.mystery引入 1)本学期学了计算机网络,对一些网络底层的东西还是不大了解 2)目前IP网络流行3种通信模式,分别是单播/广播与组播 3)根据Internet关于IP地址 ...
- c++ 网络编程(六)LINUX下 socket编程 多播与广播 实现一次发送所有组客户端都能接收到
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9614288.html 一.多播 锲子:有这么一种情况,网络电台可能需要同时向成千上万的用户传输 ...
随机推荐
- 【JUC】JDK1.8源码分析之LinkedBlockingQueue(四)
一.前言 分析完了ArrayBlockingQueue后,接着分析LinkedBlockingQueue,与ArrayBlockingQueue不相同,LinkedBlockingQueue底层采用的 ...
- Windows下程序启动时出现0xc000007b错误的解决方案
一.背景介绍 不久前用Qt开发了一款小工具在公司使用,Debug运行时一切正常.可是当Release编译发布打包之后,运行时弹出这样的提示框: 略一思考,首先排除了DLL缺失的可能性.我知道Qt应用程 ...
- Openfire 4.1.0
http://www.igniterealtime.org/downloads/index.jsp 服务器端口 接口 端口 类型 描述 所有的地址 5222 客户端到服务器 客户端使用标准端口连接 ...
- 部署.NET开发环境
昨晚把家里的电脑重新部署.NET开发环境.从晚上21点安装到今天凌晨3点多才完成,还算顺利,但是耗时最漫长莫过于在安装Visual Studio 2015 Update3...... 第一,全新安装W ...
- error when loading the sdk error parsing
Error Parsing: C:\android-sdk_r24.2-windows\android-sdk-windows\system-images\android-22\android-wea ...
- Myeclipse 的hadoop环境搭建
https://issues.apache.org/jira/secure/attachment/12460491/hadoop-eclipse-plugin-0.20.3-SNAPSHOT.jar ...
- python 替换 文件夹下的 文件名称 及 文件内容
示例效果: 1.替换某文件夹下的 文件夹及子文件夹 的名称 由OldStrDir 变为 NewStrDir: 2.替换某文件夹下的 文件夹及子文件夹 下 所有的文件的名称 由OldStrFile 变为 ...
- Mac下如何查看Tomcat的版本?
Tomcat提供了一个查询自身版本号的方法,要查询Tomcat的版本号,必须知道Tomcat所在的准确目录. 例如: 所用的Tomcat所在的目录下的bin文件夹的完整路径为:/Library/Tom ...
- 寻觅[Getting Answers]
原文:http://www.mikeash.com/getting_answers.html 作者:mike@mikeash.com 译者:今天早上起床,有幸读到这篇文章,觉得它是我们在这个世界上的基 ...
- c#的那些有效性判断
在开发中合理的对象有效性判断是程序健壮性的重要保障,也有利于提高程序的执行效率.本人简单总结了几个需要判断对象是否为空的例子,分享如下: 一.集合对象中可以包含空对象,遍历集合对象时要同时判断集合中的 ...