P9 文件传输

为什么 TCP 是可靠的通信,服务端每一步都要有回复。 因为服务端可能没有 accept 或者可能忙于其他事情,bug 掉线等等。所以虽然 TCP 本身是可靠的,但是服务器可能是不可靠的。所以为了业务是正常的,就必须在服务端正常应答的情况下,才能继续。 读取文件使用 ifstream 操作 字符串拼接报错? 一般情况都是只有 char * 和 char * 拼接,才会报错。只要语句中有一个 string, 拼接就不会报错。 参考 实现文件传输功能

2023-09-20 · 1 min · 24 words · RamLife

P7 封装 socket 客户端

封装时 send 函数为啥使用 const string & buf 作为参数类型 bool send(const string &buffer) // buffer不要用const char * const string & buf 既可以接收 string 也可以接受 char *. 估计是对 char * 进行了隐式转换成了 string. send 函数的参数为啥是 buf.data() 和 buf.size(), 而不是 buf.c_str() 和 buf.length if ((::send(m_clientfd,buffer.data(),buffer.size(),0))<=0) return false; buf.data() 和 buf.c_str() 都指向的是内容的指针,但是语义不一样。 data 表示的就是原始数据,而 c_str 表示的是转化为 char *. buf.size() 的语义是原始内容的大小,而 length 表示的是字符串的长度。 所以都是因为语义不合适。虽然都能用,但是确实不合适。 recv 函数的参数为啥是 & buf[0] 而不是 buf.c_str() 或者 buf.data() int readn=::recv(m_clientfd,&buffer[0],buffer.size(),0); // 直接操作buffer的内存。 因为后面两种返回的都是带有 const, 只有 &buf[0] 才没有 const, 适合对内容进行修改。...

2023-09-19 · 1 min · 125 words · RamLife

课外 电子 01 电阻和 LED

符号 简单介绍相关符号: 电池,电阻,LED。 设备使用 万用表 介绍了电阻,电压,电流档位 介绍了表笔插入位置 可调电源 介绍了如何调节电压 元器件 电阻 电阻的作用 使用万用表测量阻值 LED LED 的伏安特性 使用万用表测 LED 点亮电压 LED 工作电流范围 LED 易损的情况 综合 简单的电阻和 LED 的电路中,电阻阻值如何选择。 U = I * R 万用表测量电流实测和计算结果比较

2023-04-08 · 1 min · 33 words · RamLife

html5 黑马 02. 标签学习

排版标签 标题标签 <h1> 标题 </h1> 这样的就是标题标签,只有 1-6 这6级标签,1级最大,6 级最小. vs code 中使用 可以先输入 h1 再使用 tab 进行补完 在标题行上 ctrl c ctrl v 就可以复制粘贴这一行标签了。 如果需要把 h1 标签改为 h6 标签,只需要先选中 1, 然后 ctrl d 就会自动选中本行下一个 1, 这样只需要修改一处,其他选中的也会被一起修改 段落标签 <p> </p> 这个是段落标签。 如果段落太长,在 vs code 中不方便查看,可以 查看 -> 自动换行。 段落之间,有行间隙 换行标签 <br> 水平线标签 <hr> 文本格式化标签 格式化标签有短标签,也有长标签,作用是一样的。但是长标签用于对内容进行强调,方便后期的维护识别。 短 长 作用 b string 加粗 u ins 下划线 i em 倾斜 s del 删除线 媒体标签 图片标签 <img src="" alt="" title="" width="" height=""> 属性 作用 src 图片路径 alt 图片加载失败时,替换用的文本 title 鼠标在图片上悬停时,显示的文字 width 宽 height 高 标签名和属性间有空格,属性间也有空格。...

2023-04-05 · 1 min · 161 words · RamLife

html5 黑马 01. 基础介绍

基本概念 web 标准 html: 结构,主要是页面中的元素和内容 css: 表现,主要是用来调整元素的外观和位置等样式 js: 行为,主要是用于页面交互 初体验 整体骨架 <html> <head> <title>标题</title> </head> <body> 内容 </body> </html> head 中的 title 是标题,也就是网页标签显示的文字。 body 中的是实际网页显示的内容 ide vs code 提供的快捷键如下: 快捷键 作用 ! 快速生成默认的骨架代码 alt + b 打开默认浏览器,鼠标右键也可以选择 ctrl + / 注释 语法规范 注释 <!-- 注释 --> 标签构成 双标签: <b> </b> 这样的,都是需要有开始,有结束的。 单标签: <b>, <hr> 这两个一个是换行,一个是水平线,不需要范围 参考: 前端开发入门教程,web前端零基础html5 +css3+前端项目视频教程

2023-04-05 · 1 min · 58 words · RamLife

essential grammar in use, unit 9 and additional exercises 5~7

have got have got sth have got sth 意思上等于 have sth, 但是使用上有一些需要注意的地方。 have got sth, have 占的是 do 的位置,所以在疑问句中,前一种是 Have you got sth?, 后一种是 Do you have sth?. 我怀疑是因为 do 用的太多了,所以被大家都省略使用了,如果 do 不省略的话,那就应该对应的非常工整了,比如 have got sth -> do have sth. has 这种第三人称也是该缩写就缩写,比如 he has got -> he's got, 所以以后看到 he's 这种缩写,不一定是 he is 还有可能是 he has. have got to do sth have got to do sth 意思是必须做什么,口语里面经常缩写成 have gotta do sth....

2023-02-21 · 1 min · 186 words · RamLife

essential grammar in use additional exercises 2~4

缩写 英语是次生文明使用的语言,所以是发音第一,文字第二,文字是用来记录发音的。所以缩写也需要考虑到这一点,只有在发音上能够缩短的才有缩写,否则就没有缩写。 where're 不能这样缩写,因为 where are 和 where're 发音一致,如果把 're 这部分弱读,也会和 where 最后的发音一样,会造成无法分辨的情况,所以这个缩写就不存在。 where's 之类的可以减少音节的就可以存在这样的缩写 参考: https://www.zhihu.com/question/307114411 单复数 对于鞋子 shoes 的提问,注意使用复数形式 How much are they? 使用 always 之类的修饰之后,动词该加 s 还是要加的 Tom always finishes work at five o’clock. n + ing 有些 n 结尾的需要添加 n,有些 n 结尾的不用添加 n raining 不要重复 n

2023-02-03 · 1 min · 50 words · RamLife

非抢占式,有优先级的简易OS

原理 最简单的 OS 就是合作式操作系统,实现的方式是循环检查任务可执行标志,这个标志会在时间中断中来设置。优点是简单不容易出bug,缺点是实时性一般,并且每个任务需要拆分很细,最好小于时间中断。 实现 OS头文件 os_cfg.h #include "reg51.h" #define TIME_PER_SEC 200 //定义任务时钟频率,200Hz #define CLOCK 22118400 //定义时钟晶振,单位Hz #define MAX_TASK 4 //定义任务数量 //函数变量声明,在需要用以下函数或变量的文件中包含此头文件即可 extern void task0(void); extern void task1(void); extern void task2(void); extern void task3(void); extern unsigned char task_delay[MAX_TASK]; extern void run(void (*ptask)()); extern void os_timer0_init(void); OS 源文件 os_c.c #include "os_cfg.h" unsigned char task_delay[MAX_TASK]; //定义任务延时量变量 //定时器0初始化 void os_timer0_init(void) { unsigned char i; for(i=0;i<MAX_TASK;i++) task_delay[i]=0; TMOD = (TMOD & 0XF0) | 0X01; //定时器 0工作在模式 1,16Bit 定时器模式 TH0 = 255-CLOCK/TIME_PER_SEC/12/256; //CRY_OSC,TIME_PER_SEC在 os_cfg....

2010-12-01 · 2 min · 284 words · RamLife