《Linux网络开发必学教程》18_网络通讯框架的完善

2022-05-12
阅读 8 分钟
1.3k
问题:如何扩展之前的通信框架,使其支持 UDP 通信,进而成为一个完善的网络通讯框架?UDP 通讯扩展UDP 通信实体概要设计每个 UDP Point 地位对等(因为不必主动发起连接),可通过 ip 地址和 port 号进行通讯UDP Point 数据收发单位为: Message 或 Byte在接受口设计上,与 TcpClient 保持一致(框架接口一致性)目标:...

《Linux网络开发必学教程》17_深入 UDP 数据收发 (下)

2022-05-10
阅读 5 分钟
1.6k
问题: UDP 是否还有其他一对多的数据发送方式?UDP 通讯中的多播多播是向特定组中的所有主机传输数据的方法,多播也称之为组播多播数据传输的特点:多播发送者针对特定的多播组,只发送 1 次数据,组内主机均可接收到数据主机加入特定组,即可接收该组中的多播数据多播组可在 IP 地址范围内任意添加关键问题:如何收发...

《Linux网络开发必学教程》16_深入 UDP 数据收发 (上)

2022-05-09
阅读 4 分钟
1.3k
问题:如何进行一对多的 UDP 数据发送?UDP 通讯中的广播广播是向同一网络中的所有主机传输数据的方法广播类型直接广播:IP 地址中除网络地址外,其余主机地址均设置为 1本地广播:无需知道网络,使用 255.255.255.255 作为 IP 地址使用区别本地广播数据不经过路由器寻址,直接发送到本地主机本地广播应用案例:DHCPDHCP...

《Linux网络开发必学教程》15_UDP 数据收发实战

2022-05-09
阅读 4 分钟
1.1k
问题:如何使用 UDP 进行数据收发?再论 UDP 协议UDP 是无连接的(不可靠的,无应答消息,数据包无序号标识)UDP 是面向数据包的,对应用层数据既不合并也不拆分(保留数据包边界)UDP 没有拥塞控制,网络出现的拥塞不会使源主机的发送速率降低UDP 支持一对一,一对多,多对一和多对多的交互通信UDP 消息头开销小,只有 ...

《Linux网络开发必学教程》14_数据收发的扩展用法 (下)

2022-05-08
阅读 13 分钟
1.3k
MSG_PEEK (数据窥探)使用 MSG_PEEK 选项能够获取接收缓冲区数据的拷贝recv() 专用选项,可用于数据预接收指定 MSG_PEEK 选项时,不会清空缓冲区可用于获取接收缓冲区种的数据量(字节数)当接收缓冲区中没有数据时,MSG_PEEK 也会导致线程阻塞下面的代码输出什么?为什么? {代码...} client.c {代码...} server.c {代...

《Linux网络开发必学教程》13_数据收发的扩展用法 (上)

2022-05-07
阅读 8 分钟
1.3k
write() 和 send() 都可以收发数据,有什么区别?send 可以使用 flags 指定可选项信息,其中 0 表示默认发送行为send 当 flags 为 0 时,会等待发送缓冲区数据清空之后才将数据放入发送缓冲器然后返回write 不能指定可选项信息,同时不会阻塞read() 和 recv() 都可以接收数据,有什么区别?recv 可以使用 flags 指定可选...

《Linux网络开发必学教程》12_TCP通讯框架:服务端设计

2022-05-05
阅读 7 分钟
1.3k
问题:如何设计与客户端对应的服务端?TCP 通信框架设计服务端负责监听连接状态Connect : 产生通讯客户端(TcpClient), 并给出事件通知Close : 给出事件通知,并销毁客户端负责监听数据通信状态,并给出事件通知服务端事件设计EVT_CONN: 客户端连接服务端时触发,并创建 TcpClient 用于通信EVT_DATA: 客户端数据到达服务...

《Linux网络开发必学教程》11_TCP通讯框架:客户端设计

2022-05-04
阅读 12 分钟
1k
问题:有了协议和协议解析器之后,可以干嘛?TCP 通讯框架设计客户端以协议消息为基本单位收发数据同时支持字节为基本单位收发数据服务端负责监听链接,并产生通讯客户端负责监听数据通讯状态,并给出通知职责意义客户端用于进行实际的双向数据通信数据发送 & 数据接收 (协议消息)服务端仅用于监听和回调通知事件类型...

《Linux网络开发必学教程》10_应用协议解析模块(下)

2022-05-04
阅读 12 分钟
1.2k
问题:如何通过 socket 文件描述符实时解析协议数据?深度思考从文件描述符是否能够获取足够的数据?(是否一定等到数量足够(如:消息头12字节),才能开始解析)数据量足够读取 12 字节解析消息头读取数据填充 payload (length)数据量不足无法获取消息头所需数据(如何处理?解析状态如何切换?)无法获取 payload 完...

《Linux网络开发必学教程》9_应用协议解析模块(上)

2022-05-03
阅读 5 分钟
1.2k
问题:如何在代码层面封装协议细节?如何将接收缓冲区中的数据解析为 Message ?深度思考数据是否能够解析成为 Message ?数据量足够如果数据量足够,是否能够解析不止一个 Message?如何处理剩余数据 (属于下一个 Message)数据量不足是否达到协议最小长度(12 字节)?如何处理数据量超过最小长度,但不足以创建一个 Mes...

《Linux网络开发必学教程》8_应用协议设计与实现

2022-04-29
阅读 6 分钟
1.2k
问题:下面的代码输出什么?为什么? {代码...} {代码...} 完整代码 client.c {代码...} 完整代码:server.c {代码...} 输出 {代码...} 小知识发送缓冲区数据先进入发送缓冲区,之后由操作系统送往远端主机接收缓冲区远端数据被操作系统接受后放入接收缓冲区之后应用程序从接收缓冲区读取数据TCP 应用编程中的 “问题”数...

《Linux网络开发必学教程》7_TCP 与 UDP

2022-04-28
阅读 3 分钟
1.4k
TCP/IP 分层结构应用层:各个应用程序可以定义(使用)各种这样的协议传输层:确保发出的数据能够达到目标主机,完成数据传输网络层:填写数据包地址,选择数据传输路径数据链路层:融合不同连接方式的链路,屏蔽网络差异物理层:具体连接方式,有线,无线,光纤...TCP/IP 工作方式TCP/IP层次结构的特点上层依赖邻接下层...

《Linux网络开发必学教程》6_Window 下的网络编程

2022-04-28
阅读 8 分钟
1.2k
socket 接口已普遍存在于现代操作系统中Windows 下的 socket 编程接口与 Linux 中几乎相同不同之处返回类型不同(句柄类型)句柄不是文件描述符,Window 中并不是一切接文件 (因此 windows 下对于 socket 无法使用 send、recv)Windows 下 socket() 的用法 {代码...} Windows 网络编程接口#include <winsock2.h>...

《Linux网络开发必学教程》5_基于多路复用的服务端

2022-04-27
阅读 4 分钟
991
问题:使用 select() 函数可以扩展服务端功能吗? 如果可以,具体怎么实现?目前服务端的瓶颈分析服务端大多数时候处于等待状态,无法发挥主机(设备)的最大性能 {代码...} 解决方案:阻塞变轮询通过 select() 函数首先监听服务端 server_fd, 目标事件为 “连接”(读)当事件发生(客户端连接),则调用 accept() 接受连...

《Linux网络开发必学教程》4_尝鲜 seclect 多路复用

2022-04-26
阅读 3 分钟
1.4k
问题:如何增强服务端能力,同时支持多个客户端?Linux 的设计哲学:一切皆文件Linux 中的文件是什么?侠义:文件系统中物理意义上的文件(逻辑上关联的数据集合)广义:设备,通道,内存,。。。Linux 管理的一切对象理解文件描述符文件描述符是一个非负整数,本质是一个句柄一切对用户(程序员)透明的资源标识都可以...

《Linux网络开发必学教程》3_深入浅出 IP 地址

2022-04-25
阅读 4 分钟
1.5k
问题:网络编程接口中一些参数的意义是什么? {代码...} socket 参数详解int socket(int domain, int type, int protocal);参数意义domain套接字中使用的协议族信息type套接字数据传输类型信息prorocol设备间通讯使用的协议信息socket() 中的 domain 参数(协议族)PF_INET → IPv4 互联网协议族PF_INET6 → IPv6 互联网协...

《Linux网络开发必学教程》2_服务端编程初体验

2022-04-25
阅读 5 分钟
1.2k
客户端/服务端 编程模式服务端长期保留于网络(公开自己的 IP 地址),并等待客户端连接客户端发起连接动作,并等待服务端回应特点:服务端无法主动连接客户端客户端只能按照预定义的方式(协议)连接服务端服务端编程模式 {代码...} 服务端核心工作:绑定 & 监听 & 接收绑定:int bind(int sock, struct sockaddr *addr...

《Linux网络开发必学教程》1_网络编程核心概念与模式

2022-04-24
阅读 3 分钟
1.6k
问题:如何进行网络编程?网络编程的本质使用操作系统提供的接口函数,使得应用程序具备收发网络数据的能力网络接口在代码层面是操作系统提供的函数网络编程只是一系列系统函数的花式玩法应用程序通过网络接口使用操作系统的联网能力网络编程是特定领域(网络)的 C 语言程序设计协议:为进行数据通讯而预定义的数据规则...

《Linux网络开发必学教程》0_课程定位:目标与安排

2022-04-24
阅读 1 分钟
1.4k
课前第一问:为什么要学习网络编程?实践必备技能:学完 C 语言之后想做点项目练手,可以吗?职业必备技能:招聘的任职技能时代必备技能几乎所有操作系统都支持网络功能几乎所有 app 都需要联网才能工作互联网时间 → 移动互联网时代 → 物联网时代人工智能典型落地方案:云边协同推理...课程规划课程学习路线课程定位Linu...

【C++内存管理】18_总结_从最基础到最复杂

2021-06-29
阅读 2 分钟
3.3k
整理于侯捷老师 《C++内存管理机制-从平地到万丈高楼》 视频内容文档《C++内存管理机制-从平地到万丈高楼》pdf(来源于网络,十分感谢)测试环境ubuntu-18.4.3Qt 5.13.1Dev 5.11其他说明免费视频来源于b站,可自行搜索,C++内存管理机制-从平地到万丈高楼课程简介内存是电脑中的“脑”吗?CPU才是脑,CPU才是计算机中的三...

【C++内存管理】17_G4.9 的七个分配器

2021-06-27
阅读 13 分钟
3.1k
new_allocator 的 allocate 直接调用的 ::operator new ,deallocate 直接调用 ::operator delete

【C++内存管理】16_GNU C++ 对于 Allocator 的描述

2021-06-20
阅读 3 分钟
2.4k
当你将元素加入容器中,容器必须分配更多内存以保存这些元素,于是它们向其模板参数 Allocator 发出申请,该模板参数往往被另名为(aliased to)allocator_type。甚至你将 chars 添加到 string class 也是如此,因为 string 也算是一个正规 STL 容器。

【C++内存管理】15_Loki allocator 源码分析

2021-06-20
阅读 6 分钟
2.6k
Loki是由 Andrei 编写的一个与《Modern C++ Design》(C++设计新思维)一书配套发行的C++代码库。其中有两个文件 SmallObj.h 、SmallObj.cpp 进行内存管理,可以单独进行使用

【C++内存管理】14_SBH行为分析-分配+释放之连续动作图解

2021-06-11
阅读 4 分钟
2.1k
第一次,分配知识点补充 {代码...} {代码...} {代码...} {代码...} 流程描述 {代码...} 第二次,分配__crtGetEnvironmentStringsA() 发起第三次,分配第十五次,释放环境变量处理完成后的内存归还(main之气) 240H流程描述 {代码...} 第十六次,分配流程描述 【申请 b0h】 {代码...} 第 n 次, 分配流程描述【申请 230h...

【C++内存管理】13_VC6 内存分配_SBH

2021-06-06
阅读 5 分钟
2.9k
SBH 是 Small Block Heap 的缩写,进行操作系统之上的小区块内存的管理。在 VC6 中可找到源码实现,升级版本 VC10 中统一使用系统API进行内存申请, SBH 被整合到了操作系统内部。

【C++内存管理】12_G4.9 pool allocator 观察

2021-05-24
阅读 16 分钟
2.1k
注意对比 G2.9 #207 和 G4.9 #97 行, 新版本中,使用 ::operator new 进行内存申请,意味着我们可以对其进行重载后做一些观察统计

【C++内存管理】11_G2.9 std::alloc 概念大整理

2021-05-22
阅读 2 分钟
1.7k
概念大整理补充说明list 节点向分配器请求的内存大小: sizeof(Foo) + sizeof(node<Foo>*) x 2批斗大会学习使用: "常量 == 变量" 格式, 当漏泄等号时编译器会发出编译错误提示注:较新的编译器在 "常量 = 变量" 时通常也会发出编译警告不推荐使用:对象的定义与使用不应间隔太远,而应做到尽...

【C++内存管理】10_G2.9 std::alloc 源码刨析

2021-05-22
阅读 10 分钟
2.3k
std::alloc 分两级层进行内存管理,第一级在接下来的学习中是次要的,主要内容都集中在第二级里。在 G4.9 版本中,第一级已被删除G2.9 中的一级内存管理补充说明class semple_alloc :应用层内存分配的基本单位是元素个数[ n] ,但底层实现中二级分配的单位是字节,此处便完成元素个数到字节数的转换[ n * sizeof(T) ]G2...

【C++内存管理】9_G2.9 std::alloc 运行模式详解

2021-05-22
阅读 3 分钟
2k
从以下连续步骤中,我们可以了解到 alloc 工作时的基本流程。其中包含战备池、自由链表每次最多新增20个区块、追加量、碎片处理、内存不足时的处理等概念

【C++内存管理】8_G2.9 std::alloc 运行模式概述

2021-05-20
阅读 2 分钟
1.6k
free_list 数组总计包含 [0 - 15] 16个元素,其中每个元素分别对应一条子 单 链表(embedded pointers 组织管理)