- 博客(146)
- 收藏
- 关注
原创 传输层协议TCP
TCP 全称为"传输控制协议(Transmission Control Protocol").要对数据的传输进行⼀个详细的控制;TCP协议段格式tcp协议:总体:报头字段 && 原理一般而言tcp是定长的报头 4位首部长度 整除4字节! [0,15]->不对->至少20字节->约定(协议):基本单位:4字节 [0,60]-> tcp报头范围----[20,60] |
2026-09-01 12:20:21
260
原创 传输层协议UDP
在TCP/IP协议中, 用 "源IP", "源端口号", "目的IP", "目的端口号", "协议号" 这样一个五元组来标识一个 通信(可以通过netstat -n查看);如果缓冲区满了, 再到达的UDP数据就会被丢弃;• 0 - 1023: 知名端口号, HTTP, FTP, SSH等这些广为使用的应用层协议, 他们的端口号都是固定的.如果我们需要传输的数据超过64K, 就需要在应用层手动的分包, 多次发送, 并在接收端手动拼装;应用层交给UDP多长的报文, UDP原样发送, 既不会拆分, 也不会合并;
2026-08-31 12:22:37
267
原创 进程间关系与守护进程
作业是针对用户来讲,用户完成某项任务而启动的进程,一个作业既可以只包含一个进程,也可以 包含多个进程,进程之间互相协作完成任务, 通常是一个进程管道。Shell分前后台来控制的不是进程⽽是作业 或者进程组。⼀个前台作业可以由多个进程组成,⼀个 后台作业也可以由多个进程组成,Shell可以同时运行⼀个前台作业和任意多个后台作业,这称为作业控制。例如下列命令就是⼀个作业,它包括两个命令,在执行时Shell将在前台启动由两个进程组成的作业:运行结果如下所示:xfsext4ext3ext2。
2026-07-30 08:00:00
321
原创 应用层自定义协议与序列化(下)
未来我们做网络版本的计算器,那么是否还有其他服务要做呢?json序列化反序列化结果可读性很好。改TcpServer.hpp。改Protocol.hpp。改TcpClient.cc。改Protocol.hpp。
2026-07-29 14:00:00
115
原创 应用层自定义协议与序列化(中)
• toStyledString 、 StreamWriter 和 FastWriter 提供了不同的序列化选项,你可以根据具体需求选择使用。• Json::Reader 和 parseFromStream 函数是Jsoncpp中主要的反序列化工具,它们提供了强 大的错误处理机制。• 在进行序列化和反序列化时,请确保处理所有可能的错误情况,并验证输入和输出的有效性。
2026-07-29 08:15:00
465
原创 Socket编程TCP(下)
将新链接和客户端构建一个新的任务,push线程池中。创建管道&&创建子进程。改TcpServer.hpp。改TcpServer.hpp。改TcpServer.hpp。改TcpServer.cc。
2026-07-28 08:30:00
320
原创 Socket编程TCP(上)
和刚才UDP类似. 实现一个简单的英译汉的功能 TCP下面介绍程序中用到的socket API,这些函数都在sys/socket.h中。NAMESYNOPSIS• socket()打开一个网络通讯端口,如果成功的话,就像open()一样返回一个文件描述符;• 应用程序可以像读写文件一样用read/write在网络上收发数据;• 如果socket()调用出错则返回-1;• 对于IPv4, family参数指定为AF_INET;
2026-07-27 14:30:00
318
原创 Socket编程UDP(下)
其中inet_pton和inet_ntop不仅可以转换IPv4的in_addr,还可以转换IPv6的in6_addr,因此函数接口是 void *addrptr。remove_if()将所有应该移除的元素都移动到容器尾部并返回一个分界的迭代器,为了实际移除元素,你必须对容器自行调用erase()以擦除需要移除的元素。所以多线程并发访问的时候就可能出现问题。当前只介绍基于IPv4的socket网络编程,sockaddr_in中的成员struct in_addr sin_addr表示32位 的IP 地址。
2026-07-27 08:00:00
293
原创 Socket编程UDP(上)
struct ipchar part1;char part2;char part3;char part4;p->part3=1;p->part4=1;高权值位放在低地址处。
2026-07-25 15:59:57
250
原创 Socket编程预备
• IP 在网络中,用来标识主机的唯一性• 注意:后面我们会讲 IP 的分类,后面会详细阐述 IP 的特点但是这里要思考一个问题:数据传输到主机是目的吗?不是的。因为数据是给人用的。比如:聊天是 人在聊天,下载是人在下载,浏览网页是人在浏览?但是人是怎么看到聊天信息的呢?怎么执行下载任务呢?怎么浏览网页信息呢?通过启动的 qq,迅雷,浏览器。而启动的 qq,迅雷,浏览器都是进程。换句话说,进程是人在系统中的代表,只要把数据给进程,人就相当于就拿到了数据。
2026-07-24 11:11:57
220
原创 线程同步与互斥(完)
重入:同⼀个函数被不同的执行流调用,当前⼀个流程还没有执行完,就有其他的执行流再次进入,我们称之为重入。⼀个函数在重入的情况下,运行结果不会出现任何不同或者任何问题,则该函数被称为可重入函数,否则,是不可重入函数。如果相等则用新值更 新。• 悲观锁:在每次取数据时,总是担心数据会被其他线程修改,所以会在取数据前先加锁(读锁, 写锁,行锁等),当其他线程想要访问数据时,被阻塞挂起。• 死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所占用不会 释放的资源而处于的一种永久等待状态。
2026-07-23 14:00:00
169
原创 线程同步与互斥----日志与策略模式
IT行业这么火,涌入的人很多.俗话说林子大了啥鸟都有.大佬和菜鸡们两极分化的越来越严重.为了让菜鸡们不太拖大佬的后腿,于是大佬们针对⼀些经典的常见的场景,给定了⼀些对应的解决方案,这个就是。
2026-07-23 08:00:00
581
原创 线程同步与互斥---POSIX信号量
等的条件,以原子性的形式,呈现在访问临界资源之前就判断了!POSIX信号量和SystemV信号量作用相同,都是用于同步操作,达到⽆冲突的访问共享资源目的。为空或者为满的时候!功能:发布信号量,表示资源使用完毕,可以归还资源了。结论1:环形队列,不为空 && 不为满,生产消费可以同时进行!结论2:环形队列,为空||为满,生产和消费,需要同步互斥!为空的时候,只能放生产者进来,因为消费者的信号量为0。为满的时候,只能放消费者进来,因为生产者的信号量为0。所有的线程,都得先看到sem(信号量),计数器。
2026-07-22 08:15:00
327
原创 线程同步与互斥---线程同步
/ 问题2:pthread_cond_wait可能会因为,条件其实不满足,pthread_cond_wait 伪唤醒。//重点1:pthread_cond_wait调用成功,挂起当前线程之前,要先自动释放锁!//重点2:当线程被唤醒的时候,默认就在临界区内唤醒!//重点1:pthread_cond_wait调用成功,挂起当前线程之前,要先自动释放锁!//重点2:当线程被唤醒的时候,默认就在临界区内唤醒!//重点1:pthread_cond_wait调用成功,挂起当前线程之前,要先自动释放锁!
2026-07-22 08:00:00
282
原创 线程同步与互斥---线程互斥
• 共享资源• 临界资源:多线程执行流被保护的共享的资源就叫做临界资源• 临界区:每个线程内部,访问临界资源的代码,就叫做临界区• 互斥:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起 保护作用• 原子性(后面讨论如何实现):不会被任何调度机制打断的操作,该操作只有两态,要么完成, 要么未完成。
2026-07-21 17:12:18
241
原创 线程概念与控制(中)
线程ID及进程地址空间布局• pthread_create函数会产生⼀个线程ID,存放在第⼀个参数指向的地址中。该线程ID和前⾯说的线程ID不是⼀回事。• 前面讲的线程ID属于进程调度的范畴。因为线程是轻量级进程,是操作系统调度器的最小单位,所以需要⼀个数值来唯⼀表示该线程。• pthread_create函数第⼀个参数指向⼀个虚拟内存单元,该内存单元的地址即为新创建线程的线程ID,属于NPTL线程库的范畴。线程库的后续操作,就是根据该线程ID来操作线程的。
2026-07-20 10:57:41
459
原创 Linux线程信号(完)
NAMESYNOPSIS信号编号 如何处理信号 输出型参数---历史上信号带回来,方便恢复 自定义捕捉方法---信号集。
2026-07-19 12:10:44
205
原创 进程间通信(4)---共享内存
创建一段内存空间,申请的内存映射到A的物理内存当中。同样的B也是这样。通过页表进行虚拟地址和物理地址的映射。从此往后进程A和进程B就可以使用整个自己在地址空间上申请到的虚拟地址空间,两个进程在自己申请好的进程A和进程B的起始虚拟地址就可以完成对这块公共内存的访问。把这部分基于映射的,这种通信方式称之为共享内存。
2026-06-19 08:46:47
448
原创 进程间通信(3)---命名管道
命名管道在实现通信的时候,如果作为读取一方,假设write(写入)方没有执行open的时候,read(读取)方,就要在open内部阻塞,直到有人把管道文件打开了,open才会返回。• FIFO(命名管道)与pipe(匿名管道)之间唯⼀的区别在它们创建与打开的方式不同,⼀但这些 ⼯作完成之后,它们具有相同的语义。两个进程在各自的视角里,都有一个自己的struct file,但是最终访问的都是同一个文件。如果我们打开文件是失败的,代码就不应该往后走了,但我们还想让它打印出错误。
2026-06-06 15:29:27
442
原创 进程间通信(2)--进程池
可以规定任务码,通过发送任务码唤醒对应的子进程,另一方面根据任务码发送的数据。让对应的子进程完成对应的工作。此时这种工作提前把我们的子进程创建好一批,我们叫做进程池。
2026-06-06 09:02:53
468
原创 计算机系统概述
计算机的发展通常按其所使用的(逻辑元件)和的飞跃来划分,主流观点可分为四代。核心依据包括:物理器件、主存储器、运算速度、软件技术及应用领域的变化。:真空电子管作为逻辑开关和放大元件。:水银延迟线、阴极射线管、磁鼓等。:每秒几千次至几万次。:直接使用机器语言,后期出现汇编语言,几乎没有系统软件。:体积庞大、功耗极高、发热量大、可靠性差、价格昂贵,主要用于科学计算和军事领域。:晶体管取代电子管,实现更小体积和更低功耗。:磁芯存储器成为主流。:每秒几十万次至上百万次。
2026-06-03 21:44:46
768
原创 进程间通信(1)
进程问通信(IPC,Inter-Process Communication)是指运行在同一台计算机成不同计算机上的多个进程之间进行数据交换和通信的技术,由于每个进程都有自己的地址空间,它们无法直接访问彼此的数据,因此需要通过特定的机制来实现通信,IPC是操作系统和多进程编程中的一个重要概念,广泛应用于分布式系统、多任务操作系统以及各种应用程序之间。标准• 管道是Unix中最古⽼的进程间通信的形式。• 我们把从⼀个进程连接到另⼀个进程的⼀个数据流称为⼀个“管道匿名管道,通常用来做父子通信!
2026-06-02 22:47:35
331
原创 Python 面向对象编程核心:对象、实例化、封装与变量作用域
类(Class):是创建对象的蓝图或模板。它定义了对象应该具有的属性(数据)和方法(行为)。对象(Object):是根据类创建的具体实例。每个对象都有自己的状态(属性值),并可以执行类中定义的行为。生活类比:类就像一张“汽车设计图纸”,定义了汽车的品牌、颜色、最高时速、启动方法等。对象就是根据这张图纸生产出来的具体汽车,每辆车有自己的颜色、车牌号,但都遵循图纸的规范。class Car:"""汽车类"""# 类属性(所有实例共享)wheels = 4# 实例初始化方法(构造器)
2026-06-01 23:08:33
467
原创 MySQL connect 访问
mysql的基础,我们之前已经学过,后面我们只关心使用要使用C语言连接mysql,需要使用mysql官网提供的库,大家可以去官网下载我们使用C接口库来进行连接。
2026-06-01 22:59:39
262
原创 Python类
类(Class)是创建对象的蓝图或模板。它定义了一组属性和方法,对象则是类的具体实例。面向对象编程(OOP)的四大特性封装:隐藏内部实现细节,对外暴露接口。继承:子类复用父类的代码,并可扩展或重写。多态:同一操作作用于不同对象,产生不同结果。抽象:定义抽象接口,延迟具体实现。使用class关键字定义类,类名通常使用大驼峰命名法。class Dog:"""一个简单的狗类"""# 类属性(所有实例共享)# 实例初始化方法(构造函数)self.name = name # 实例属性# 实例方法。
2026-05-31 23:17:38
423
原创 MySQL用户管理
允许开账号,就是这些用户的用户名和密码信息放置到mysql对应的user表里面,此时就有了这些用户了。grant 权限列表 on 库.对象名 to '用户名'@'登陆位置' [identified by '密码']set password for '用户名'@'主机名'=password('新的密码');revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';所以其实之后的那些操作,都是在user表里面做增加删除修改。set password=password('新的密码');
2026-05-31 08:00:00
357
原创 MySQL视图
视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。
2026-05-30 10:45:50
368
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅