当前位置: 首页 > news >正文

套接字选项、广播和组播

1. 套接字选项(socket options)

每一个套接字(socket)在不同的协议层次(级别)上面有不同的行为属性(选项)

我们可以设置 / 获取指定的套接字选项


getsockopt:获取套接字的选项
setsockopt:设置套接字的选项

NAMEgetsockopt, setsockopt - get and set options on sockets
SYNOPSIS#include <sys/types.h>#include <sys/socket.h>int getsockopt(int sockfd, int level, int optname,void *optval, socklen_t *optlen);int setsockopt(int sockfd, int level, int optname,const void *optval, socklen_t optlen);sockfd:你要设置或者获取属性的套接字描述符level:你要设置或者获取属性位于什么级别optname:选项名称optval:指针,指向一块空间get:指向的空间用来保存获取到的值set:指向的空间用来保存需要设置的值,把指定的值设置到socket上面去optlen:get:指针,调用前用来保存optval指向的空间的长度,调用后保存的是获取到的选项的实际大小(防止内存越界)set:变量,用来指定设定选项的选项值的长度返回值:	成功返回0,失败返回-1,同时errno被设置

获取指定的套接字的接收缓冲区大小,并重新设置该套接字的接收缓冲区大小

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>int main() {// 申请一个套接字int sockfd = socket(AF_INET, SOCK_STREAM, 0);	if (sockfd == -1) {perror("socket error");return -1;}int buflen;socklen_t len = sizeof(buflen);// 获取接收缓冲区大小int r = getsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, (void *)&buflen, &len);if (r == 0) {printf("buflen = %d\n", buflen);}// 设置int val = 1;setsockopt(sockfd, SOL_SOCKET, SO_REUSEPORT, (void *)&val, sizeof(val));// 获取int on;socklen_t len2 = sizeof(on);r = getsockopt(sockfd, SOL_SOCKET, SO_REUSEPORT, (void *)&on, &len2);if (r == 0) {printf("on = %d\n", on);}close(sockfd);return 0;
}

设置套接字选项,允许端口号重用
 

2. 广播

一对多的通信


a. 只有当传输层协议为UDP(SOCK_DGRAM)时,才支持广播功能
            TCP是端对端的连接,通信前需要进行三次握手建立连接
            广播是一对多的通信
        
b. 广播的地址问题,如果发送广播,网络地址是哪里呢?
            广播是向局域网中所有的主机发送信息
            广播的地址是将IP地址中所有的主机号设置为1
            即: xxx.xxx.xxx.255
                例子:
                    你的IP:192.168.1.103
                    哪些是主机号你还不知道?
                    netmask:255.255.255.0
                    这个IP的局域网的广播地址是:192.168.1.255

                        

                    你的IP:192.168.1.103
                    哪些是主机号你还不知道?
                    netmask:255.255.0.0
                    这个IP的局域网的广播地址是:192.168.255.255

3. 多播(multicast)

单播用于两个主机之间端对端的通信,广播用于一个主机对整个局域网上所有的主机进行数据通信
单播和广播是两个极端

有时候,我们需要对一组特定的主机进行通信

=====>多播
 



 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【elasticsearch实现优先展示连词并按某个字段折叠显示最新一条】
  • 代码片段管理的终极助手:MassCode
  • 参数化的艺术:Postman中API测试用例的动态构建
  • DP学习——享元模式
  • javascript deriveKey和deriveBits()由主密钥派生出新的密钥进行加密
  • git--本地仓库修改同步到远程仓库
  • 基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
  • SPSS个人版是什么软件
  • qt--做一个拷贝文件器
  • 深入理解Spring依赖注入与生命周期管理
  • 取消Idea文件夹的自动合并操作!
  • Unity C#底层原理(二)
  • 【BUG】已解决:No Python at ‘C:Users…Python Python39python. exe’
  • Tomcat响应数据过程
  • 背单词工具(C++)
  • 【译】理解JavaScript:new 关键字
  • HTTP中GET与POST的区别 99%的错误认识
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • Java IO学习笔记一
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • JS函数式编程 数组部分风格 ES6版
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • pdf文件如何在线转换为jpg图片
  • Puppeteer:浏览器控制器
  • 当SetTimeout遇到了字符串
  • 服务器之间,相同帐号,实现免密钥登录
  • 蓝海存储开关机注意事项总结
  • 力扣(LeetCode)22
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​你们这样子,耽误我的工作进度怎么办?
  • #LLM入门|Prompt#3.3_存储_Memory
  • #传输# #传输数据判断#
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (Python第六天)文件处理
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (图文详解)小程序AppID申请以及在Hbuilderx中运行
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .NET 8 跨平台高性能边缘采集网关
  • .NET MAUI Sqlite程序应用-数据库配置(一)
  • .NetCore部署微服务(二)
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149
  • []使用 Tortoise SVN 创建 Externals 外部引用目录
  • [1]从概念到实践:电商智能助手在AI Agent技术驱动下的落地实战案例深度剖析(AI Agent技术打造个性化、智能化的用户助手)
  • [AI Google] 使用 Gemini 取得更多成就:试用 1.5 Pro 和更多智能功能
  • [Android Studio 权威教程]断点调试和高级调试
  • [CDOJ 1343] 卿学姐失恋了
  • [ESP32] 编码旋钮驱动
  • [flask]http请求//获取请求头信息+客户端信息