Rust in Action笔记 第八章 网络

  1. P253的图展示了网络各层用到的协议在这里插入图片描述
  2. Box<dyn std::error::Error>表示一个指针指向的实现了标准错误库的类型,dyn表明这是一个特征对象(trait object),是rust里多态的一种实现方式;
  3. 特征对象和模板对象(generics)都是rust实现多态的方式,模板属于静态分发(static dispatch),需要更多的磁盘空间(disk space),但是更快(faster funtime);特征对象(trait object)属于动态分发(dynamic dispatch),运行时需要的空间更小但会引入一点运行时的开销(间接指针的寻址开销);
  4. 在rust里特征对象有三种形式,&dyn Trait, &mut dyn Trait, Box<dyn Trait>,主要区别是Box<dyn Trait>是有所有权的对象(owned trait object),另外两种是借用(borrowed)的,旧版本中还有&Trait, Box<Trait>表示特征对象,现在已经弃用,在函数返回值封装错误成Box<dyn Trait>的原因是Box的大小已知,可以存放在栈上;
  5. 8.3节后面大部分通过一个简单的RPG游戏来介绍特征对象;
  6. 8.4节讲了如何使用标准库中std::net::TcpStream来创建tcp连接,以及使用trust_dns库来解析域名;通常绑定本地地址为0.0.0.0:0,表示在本机由OS挑选一个随机的端口来创建连接;
  7. 使用Vec::with_capacity(512)vec![0;512]来创建Vec<T>的区别在于前者的长度为0,容量为512,后者的长度和容量都是512;
  8. 问号?在一个返回Result<T,E>的函数结尾是一个语法糖,作为try!宏的缩写形式,当返回结果是Ok(T)的时候返回T,返回Err(err)的时候,try! / ?提前返回并且尝试将err转化成调用函数返回值的Error类型;
  9. 为一个新的类型实现std::error::Error可以在实现部分留空,因为在std::error::Error里有默认实现,map_err(f)中会把一个error类型映射(map)到一个函数(function)中,在这里一个实现了std::error::Error的枚举错误类型可以看做是一个function;
  10. 如果不想使用map_err(),可以为自己的Error类型实现std::convert::From来减少过于冗长的代码;还有一种应对多种Error类型返回值的方法就是使用unwrap()或者expect(),但这种方法不推荐给库作者,因为使用库的用户可能会碰到意想不到崩溃;
  11. MAC地址有6个字节,分为全球地址(universally administered address)和局域地址(locally administered address),全球地址在MAC地址的前3个字节里,表示组织编号,而局域地址的6个字节都是设备编号;
  12. MAC地址有单播(unicast)和广播(multicast)两种模式,区别在于单播只会让目标MAC地址收到数据帧(frame),设置方法是在MAC地址第一个字节的最低位,设为1表示广播模式,下图比较清晰的阐释了两种模式的区别:图8.4
  13. 8.9节介绍了用ip tuntap工具来创建虚拟网络设备,必须在Linux环境下运行,详见Page282;8.10节从命令行参数处理、MAC地址生成、DNS解析、用TCP原语发起HTTP请求,实现了一个比较底层的网络处理工具;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/34671.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

物化视图功能验证

物化视图(Materialized View)和视图(View)类似&#xff0c;也是一个视图名字对应一个SQL查询查询语句。不同之处在于&#xff1a;物化视图定义时使用了额外的关键字materialized&#xff0c; 它把结果集保存在起来&#xff0c;查询的时候直接读取保存的结果集&#xff0c;而不必…

Zabbix安装

Zabbix6.0 一&#xff1a;zabbix 是什么&#xff1f;二&#xff1a;Zabbix 6.0 新特性&#xff1a;1、Zabbix server高可用防止硬件故障或计划维护期的停机&#xff1a;2、Zabbix 6.0 LTS新增Kubernetes监控功能&#xff0c;可以在Kubernetes系统从多个维度采集指标&#xff1a…

前台-打印

vue3 + TS 实现点击按钮打印功能(vue-easy-print)_Caroline0812的博客-CSDN博客 插件 jsbarcode、uuid、vue-easy-print、vue-qr 主页面 <script setup lang="ts">import { ref } from vueimport PrintUser from ./printUser.vueconst easyPrint = ref()c…

深度学习准确率提升之天花板分析

案例1 OCR文字识别流水线主要分为三个模块&#xff1a;文字检测->字符分割->字符识别 训练完成后整个系统的准确率是72%&#xff0c;需要进一步提升准确率就需要单独分析每个模块的提升空间。 1&#xff09;对于文件检测模块&#xff0c;把训练集的图像人工确保标注准…

物联网芯片

1、当前我的个人开源库基于STM32F103&#xff0c;开发环境基于Keil&#xff0c;操作系统基于FreeRTOS V9.0 2、基于官方标准固件库V3.5基础上开发的BSP驱动外设库。 3、当前完成的有BKP_BSP、DMA_BSP、EXTI_BSP、FSMC_BSP、GPIO_BSP、IWDG_BSP、I2C_BSP、RTC_BSP、SPI_BSP、U…

论文解读:SuperGlue: Learning Feature Matching with Graph Neural Networks

SuperGlue: Learning Feature Matching with Graph Neural Networks 发表时间&#xff1a;2020 论文地址&#xff1a;https://arxiv.org/abs/1911.11763 项目地址&#xff1a;http://github.com/magicleap/SuperGluePretrainedNetwork。 本文介绍了一种通过联合寻找对应和拒绝…

浅谈基于分项计量的校园能源监管平台解决方案设计

张心志 关注acrelzxz 安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;伴随着我国经济的飞速发展&#xff0c;国家机关办公建筑和大型公共建筑高耗能的问题日益突出&#xff0c;如何解决建筑能耗己成为一个国家总能耗的重要组成部分。学校是肩负着教育、科研和社会服…

AutoCV第十一课:DL基础

目录 DL基础前言1. BP训练mnist2. 权重初始化理论分析总结 DL基础 前言 手写AI推出的全新保姆级从零手写自动驾驶CV课程&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考。 本次课程我们来了解下 BP 反向传播和学习权重初始化相关知识 课程大纲可看下面的思维导…

Redis的持久化方式

为什么要持久化 Redis是内存数据库&#xff0c;宕机后数据会消失&#xff0c;Redis重启后快速恢复数据&#xff0c;要提供持久化机制。 把内存中的数据持久化到磁盘中&#xff0c;防止数据丢失。 —当redis服务器开启时&#xff0c;会把磁盘中的数据加载到内存中进行计算。 …

docker搭建nginx

一、安装Docker 1、安装&#xff1a; yum install docker 2、启动/停止/重启docker服务 systemctl docker start systemctl docker stop systemctl docker restart #开机自启动 systemctl enable docker#设置容器自启动 1.创建容器时设置 docker run -d --restartalways …

vue使用mapbox地图

1、下载依赖 npm install --save mapbox-gl mapbox/mapbox-gl-language 2、引入mapBox&#xff0c;将引入的内容封装为js文件 在api/map文件夹下新建mapbox.js文件 代码&#xff1a; import mapboxgl from mapbox-gl import mapbox-gl/dist/mapbox-gl.css import MapboxLang…

Redis缓存问题与缓存更新机制

目录 ​编辑 一、缓存问题 1.1 缓存穿透 1.1.1 问题来源 1.1.2 解决方案 1.1.2.1 缓存空对象 1.1.2.2 使用布隆过滤器 1.2 缓存击穿 1.2.1 问题来源 1.2.2 解决方案 1.2.2.1 设置热点数据永远不过期 1.2.2.2 新增后台定时更新缓存线程&#xff08;逻辑不过期&#xff09; 1.2.…

MFC项目添加外部头文件和源文件后编译出现C1010错误

出现这个问题的主要原因是如果使用VC向生成工程的话&#xff0c;默认使用预编译头文件“stdafx.h”&#xff0c;这样做的目的是为了加快编译速度。 如果加入第三方c/cpp文件没有#include “stdafx.h” &#xff0c;就会报此错误。 在<解决方案管理器中>(就是可以看到工程…

Git 常用操作总结

版本控制系统&#xff08;VCS&#xff09;是管理文件和目录所做的更改的工具&#xff0c;每一次提交便记录下目录及其文件的内容&#xff0c;以及较上一版本的更改。通过这样去跟踪项目的更改过程&#xff0c;方便与他人进行协作&#xff0c;或者撤销不想要的更改以回退到此前的…

10 Web全栈 组件化设计

前端架构层次设计 前端技术体系庞大&#xff0c;层级也非常分明&#xff0c;在架构设计领域中不能一概而论&#xff0c;任何应用种类都有自己独立的架构体系。比如在前端开发领域&#xff0c;在框架基础上进行应用构建的开发者锁思考的问题&#xff0c;与在组件库设计方面的开…

【文件 part 6 - 格式化读写文件函数 随机读写】

格式化读写文件函数 /* 函数调用: */ fprintf ( 文件指针&#xff0c;格式字符串&#xff0c;输出表列&#xff09;&#xff1b; fscanf ( 文件指针&#xff0c;格式字符串&#xff0c;输入表列&#xff09;&#xff1b;/** 函数功能:* 从磁盘文件中读入或输出字符* fprint…

SAP从入门到放弃系列之生产订单结算

文章目录概览 一、概述二、结算的模式2.1、订单相关的成本归集2.2、产品相关的成本归集 最后 一、概述 当生产从计划到订单&#xff0c;生产领料、投料、报工、入库整个生产流程完成后&#xff0c;生产订单中会产生对应的财务数据&#xff0c;或者说借贷项数据&#xff08;材料…

npm启动,node.js版本过高

“dev_t”: “set NODE_OPTIONS”–openssl-legacy-provider" & npm run dev\n"

Ubuntu安装碰撞检测库FCL以及前置依赖libccd, OctoMap

Ubuntu安装碰撞检测库FCL以及前置依赖libccd, OctoMap 大致安装流程见FCL github地址&#xff0c;但是在安装libccd时存在一些问题。 建议完整浏览后再进行安装 1.编译libccd的报错 首先FCL页面已经说明libccd要直接克隆源码&#xff0c;不要下载压缩包。 其次&#xff0c;在…

MAYA传送带上放石头(新旧粒子系统)

播放试试 使用老的粒子系统 particleShape1.shuliangrand(0,5); particleShape1.daxiao<<rand(0.2,0.5),rand(0.2,0.5),rand(0.2,0.5)>>; particleShape1.xuanzhuan<<rand(360),rand(360),rand(360)>>; 使用新的粒子系统 粒子向后滑落 新粒子系统能进行…