自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(118)
  • 收藏
  • 关注

原创 【算法】冒泡排序

冒泡排序就是将相邻的元素进行比较,然后将元素逐渐排好序,假设我们有n个元素,那么就是要比较n-1轮,因为最后剩下一个元素不用继续比较,然后在每轮中我们要比较n-轮数-1次,因为每经过一轮比较我们就排好一个元素,那么下轮比较次数就会减少一次。在比较时,我们可以设置一个变量用来当作标志位,如果进行了比较就将标志位置为1,然后在下轮前在将其赋0,如果有哪轮比较后标志位仍为0,说明没有需要排序的元素了,那么就可以直接结束循环。

2023-10-25 23:42:40 321

原创 【计算机网络】 基于TCP的简单通讯(客户端)

连接服务端我们使用的是connect()函数,分别为连接使用的socket,连接的地址信息,连接的地址信息长度。返回值为int类型,如果没有错误返回0,否则返回SOCKET_ERROR。这样我们的TCP协议简单通讯就写好了。没有什么问题,可以一人说一句话。先运行服务端再运行客户端。

2023-09-28 23:30:18 895

原创 【计算机网络】 基于TCP的简单通讯(服务端)

接收数据我们使用recv()函数,这个函数相比recvfrom()少了两个参数,它不需要记录对端的地址信息了,因为已经跟对端连接成功了,已经知道对端的地址信息了,连接成功返回的socket就像是连接在两端的一条绳。监听我们用listen()函数进行,他有两个参数,第一个为socket,意为派哪个socket去进行监听,第二个参数为int值,它是能够等待被连接的队列的最大长度,返回值如果是0就没有问题,为SOCKET_ERROR就报错。发送数据我们使用send()函数,原理和recv()函数相同。

2023-09-27 23:51:52 504

原创 【计算机网络】 基于UDP的简单通讯(客户端)

不需要绑定ip地址是因为绑定ip地址是在操作系统那里注册,那么为什么客户端不需要绑定而服务端就要绑定呢,原因是有发送数据的顺序决定的,一般都是客户端先发,主动发消息的时候操作系统就会自动给分配一个端口号,然后操作系统也会帮助选择一个网卡。客户端跟服务端差不多,也要先加载库,在加载库之后也要创建套接字,但是客户端一定是没有绑定ip地址的,之后是循环发送数据和接收数据,最后关闭套接字、卸载库。因为我们已知对端的ip,所以在接收数据的时候不需要使用输出参数,填NULL即可。运行一下,先开启服务端再开启客户端。

2023-09-26 23:31:54 422

原创 【计算机网络】基于UDP的简单通讯(服务端)

第一个变量是ip地址类型,我们用的ipv4类型,第二个是端口号,第三个是ip地址。函数的参数有六个,第一个为socket,意为使用哪个socket进行接收,第二个参数为char*,是一个输出参数,是用来接收数据的缓冲区,第三个参数为这个缓冲区的大小,第四个参数是一个标志位,用来决定当前的接收方式,我们在这里不做特殊设置,用默认的即可,下一个参数也是一个sockaddr *输出类型的参数,用来存放数据是从哪里来的,最后一个参数当然就是上一个参数的长度,但由于它属于是输出类型的参数,所以要变为指针类型。

2023-09-25 23:52:07 377

原创 【计算机网络】 TCP和UDP的区别

怎么能让在我们使用UDP的情况下还能让其传输可靠呢?答:可以在应用层手动写一个seq和ack的机制。

2023-09-24 23:58:22 410

原创 【计算机网络】 TCP协议总结

答:TCP是一对一传输的,理论上是不能发广播的。

2023-09-21 20:47:08 323

原创 【计算机网络】 拥塞控制

网络中的链路容量和交换节点中的缓存和处理机都有着工作的极限,当网络的需求超过他们的工作极限时,就出现了拥塞。在网络中出现拥堵时,如果继续发送大量数据包,可能会导致数据包时延、丢失等,这是TCP就会重传数据,但是 一重传就会导致网络的负担更重,于是会 导致更大的时延以及更多的丢包,这个情况就会进入恶性循环被不断地放大…当收到三个重复的ACK时,触发快重传机制,那么cwnd会变为原来的一半,然后ssthresh等于当前的cwnd,然后使用快恢复的算法,cwnd=ssthresh+3,然后继续使用拥塞避免算法。

2023-09-20 20:23:57 552

原创 【计算机网络】 Nagle算法

Nagle算法默认是打开的,如果对于一些需要小数据包交互的场景的程序,比如telnet或ssh这样的交互性比较强的程序,则需要关闭Nagle算法。Nagle算法就是为了尽可能发送大块数据,避免网络中充斥着许多小数据块。(因为在传输时不会因为数据包小而传输的快,是根据包的个数转发的)

2023-09-19 21:03:23 859

原创 【计算机网络】 心跳机制

就是每隔几分钟发送一个固定信息给服务端,服务端收到后回复一固定信息。如果服务端几分钟内没有收到客户端信息则视客户端断开。

2023-09-18 18:04:23 707

原创 【计算机网络】 粘包问题

tcp是数据流传输,是一种没有边界的,可以合并的传输数据方式。合并就要能拆开,拆不开就是粘包。适用场景:适合用户可输入的内容比较有限比较固定的情况。缺点:数据可能和标志位重合,导致错误拆包。适用场景:适合每次发的大小基本是固定的。缺点:每次会多发一个包,浪费空间。设置标志位(起始/结束标志位)先发数据长度,然后再发数据包。缺点:容易浪费空间和资源。适用场景:适合网页浏览。缺点:浪费时间和资源。

2023-09-15 20:50:04 493

原创 【计算机网络】 TCP流量控制——滑动窗口和累积应答

我们前面所说的是我们每发送一个包对端就要回一个ack,那么这样效率太慢了,我们这里就有一个累积应答的机制,就是说我们客户端累积发送多个包,然后服务端再统一进行回复。那么我们累积应答时具体发送多少数据之后统一回复一个ack是由什么决定的呢,就是由我们之前所说的窗口的大小来决定的。主要的方式就是返回的ACK中会包含自己的接收窗口的大小,并且利用大小来控制发送方的数据发送。当发送数据过程中有一个或多个包丢失,从序号小的位置回复一个ack,让发送端重新发送。

2023-09-13 23:34:00 528

原创 【计算机网络】 RTT和RTO

路由器排队是因为他不止给一个人处理数据,他会给所有经过它的数据进行处理,当这个路由器收到的数据比较多,它每秒能够处理的数据量是有限的,那么多出来的数据就要等到下一秒才能够处理,然后等待处理的数据的队列可能越排越长,在排队的过程中就有可能出现超时了,所以往返时延是一个重要的指标。RTT(Round-Trip Time)是计算机网络中的一个重要的性能指标,表示从发送端发送数据开始,到发送端接收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延。也就是从发送数据到接收到ack的时延。

2023-09-12 20:51:35 2388

原创 【计算机网络】 TCP——四次挥手

答:因为最后等待2MSL是为了防止最后一次ACK丢失,如果ACK丢失了,在2MSL中会再次收到FIN,那就再回一个ACK,如果没有再次收到FIN,就证明ACK没有丢失,就可以放心进入CLOSE状态了,如果不等待就关闭并且ACK包丢失了,那么被动方就会一直重复发FIN包。答:要将之前收到的数据都处理完再回复FIN包,立刻回ACK是为了防止超时重传,因为如果处理数据的时间过长就会触发超时重传机制。

2023-09-11 22:55:02 997

原创 【计算机网络】TCP传输控制协议——三次握手

答:因为当接收到的包中不止有ack,那么需要回复一个ack,否则会产生超时重传,服务端需要接收到发送ACK的ACK才能建立连接。答:因为服务端在发送ACK包的同时也可以发送SYN包,原因是这两个标志位在逻辑上不产生冲突。

2023-09-10 14:46:32 825

原创 【计算机网络】 确认应答机制与超时重传

那如果是服务端回复的ack丢失,道理也基本相同,也是在规定时间内没有收到服务端回复的ack包,那么就再次发送一遍数据,不同的是因为服务端已经接收到过这个数据了,所以不会再次处理这个数据,就把重复的包丢弃,然后重新回复一遍ack。在我们客户端发送数据的同时会有一个定时器,如果在规定时间没有收到服务端回复的ack,那么就证明我们的包丢失,那就再给服务端重新发送以下丢失的包。200,服务端收到后再回一个ack=201,在书写过程中,我们一定要先把标志位置1,然后再发送数据包,否则包是失效的。

2023-09-09 14:42:11 1041

原创 【计算机网络】 TCP协议头相关知识点

首先是源端口和目的端口,这两个是UDP中也有的,但是UDP中只有这两个,没有后面的校验数据,接着是序号(seq)和确认号(ack),他们两个是配合使用的,比如说发送端发送了一个序号为1的seq,然后接收端回一确认号为2的ack,就证明说收到了seq为1的这个包,可以继续发送seq等于2的包,这样可以保证数据可靠,序号还能保证顺序不乱。最后可变部分的原理和IP部分也基本一样。在开发过程中,我们要坚持一个不信任原则,不管是在哪一层,干什么都要对数据进行校验,因为在任何时候我们的数据都有可能被他人访爆。

2023-09-08 20:49:52 822

原创 【计算机网络】 IP协议格式以及以太网帧结构

生存时间是一个倒计时,当计时为0时,这个包的生存时间就到了,当某一个路由器在转发时发现你的生存时间为0时就会将这个包丢弃,原因是有的包会在传输过程中迷路,那么这种数据包不能让它在网络中一直存在,这就造成了丢包,他会占用我们的带宽,生存时间不是单纯的时间,而是能经过路由器的个数。可变部分就是为了我们想要在ip层网络层加一些东西,因为收到数据时是先到达网络层,然后到达传输层应用层的,所以网络层一定会先处理数据,比如用华为的手机连接华为的路由器,是不需要密码的,那么就是在网络层处理的。

2023-09-07 19:11:34 763

原创 【计算机网络】 子网划分

我们知道C类ip默认子网掩码位255.255.255.0,C类ip的网络号应该是24位,故其借用了主机位4位来充当网络位,所以创建的子网个数就是2 ^ 4 = 16。从0开始不断增加,直到到达子网掩码值,中间的结果就是子网,即0,64,128,192。网关都是具有路由功能的ip地址,就是说网关必须要有路由功能,默认的主机号都是0,这样的才是网关。具有正常的网络号部分,而主机号部分全为1的ip地址称之为广播地址。非默认的子网掩码中1的个数一定比默认子网的多,并且1要连续,这些1是从原来的主机号中借来的。

2023-09-06 10:04:56 1285

原创 【计算机网络】 ARP协议和DNS协议

ARP协议实现的过程就是自己设备会发送一个ARP Request的广播,那么当前路由器所连接的所有设备都会收到这个广播,数据包中的目的MAC填0,所有收到这个广播的设别都会看自己的IP是不是这个广播的目IP,如果不是就会将这个包丢弃,如果是就会回一个ARP Reply的单播,然后就可以开始通信了。当发送端广播ARP请求时,本地网络上不会有主机回应(因为IP地址是外网的),此时路由器将会回应该请求,则发送源认为路由器就是目的主机,会将报文全部转发给它,再由路由器转发报文到外网,则该路由器就被称为ARP代理。

2023-09-05 19:10:19 1034

原创 【计算机网络】 七层网络模型

是支持TCP/IP协议的网络通信的基本操作单元,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。比如我们如果在登录一个网站之后,浏览页面过程中要跳转网页,那么不需要重复登录,靠的就是session会话管理,他就是保证在同一个网站中不管多少次的页面跳转,都不需要重新登录。传输层通信协议,有流量控制和差错控制,使用TCP协议的应用比如邮件的接收和发送、文件传输、远端登录。想要使数据发送的快,就要对数据进行压缩,也会使网络更通畅。

2023-09-05 14:22:06 256

原创 【计算机网络】 静态库与动态库

把头文件拷贝到当前项目中,添加头文件依赖把库文件拷贝到当前项目中,添加库文件依赖把头文件拷贝到当前项目中,添加头文件依赖把索引文件拷贝到当前项目中,添加索引文件依赖把dll拷贝到exe同文件下。

2023-09-04 19:32:29 1249

原创 【数据结构和算法】(练习题)判断数组中有无重复出现元素

给出一组数据,其中有n个元素,每个元素的数值范围在1~n-1之间,判断数据有无重复出现,若重复出现则报错。

2023-06-02 20:31:24 141

原创 【计算机网络】第一章 计算机网络基础(期末急救包)

期末将至,相信有的同学们还在为怎么过期末而发愁吧!不用担心,即日起将会陆续更新期末特辑,保证在学完后可以顺利通过期末考试。本系列不止适用于期末考试,自考、考研的同学学习后也同样会有很大帮助。希望各位考的都会蒙的全对,期末顺利!

2023-05-12 20:21:20 624

原创 《C语言技术体系》 学习路线总目录 + 思维导图

本篇文章是对专栏《C语言技术体系》中所有文章及知识点进行总结归档,C语言是最底层也是最核心的语言,要想走上程序员这条道路应该都绕不开它吧。那么这篇超详细C语言目录就奉上了,同学们可以直接根据需要点击连接查看呦!那么有已经学完C语言,开始进阶C++方向的同胞们也可以查看现在正在更新的专栏《C++进阶之路》,希望对你能有所帮助。3.2.1【C语言】 typedef以上就是C语言技术体系的全部内容了,希望对你的学习有帮助,我们山顶见!

2023-05-03 16:19:17 2948

原创 【C语言】 知识点汇总--基础知识点梳理(超全超详细)

目录一、从源代码到exe二、基本数据类型三、字符在屏幕上的显示原理四、溢出现象五、类型转换规律六、短路问题七、指针变量类型的作用 八、指针类型的扩展——多级指针九、指针类型的扩展——指针数组十、指针类型的扩展——数组指针十一、一维数组-名-特性十二、二维数组-名-特性十三、大端存储-小端存储十四、函数在源代码中的三种状态十五、堆区与栈区的区别十六、函数的执行原理十七、枚举类型十八、typedef二十、const二十一、全局/局部变量生命周期与作用域二十二、static静态变量二十三、extern二十四、宏d

2023-05-02 20:11:23 14830 1

原创 C语言 通讯录系统

至此,C语言的学习告一段落,以一个不完整的通讯录结束,但大体框架已经搭建,一些功能没有写,感兴趣的可以自行参透。

2023-04-05 13:10:31 403 1

原创 C语言 封装静态库/动态链接库

静态库需要放到项目中,他会跟随项目一同打包为exe文件,所以如果exe用到的组件较多,那么他的文件体积会很大,并且每个程序的代码区都会有一份静态库,会造成空间浪费。动态链接库是独立在exe外边的,它属于资源共享,谁想用谁就调用它即可,并且升级也很简单,只要更新自己就行,因为不需要打包在exe文件内,所以文件体积也会较小。将.lib文件加入到测试项目中,可以观察到动态链接库的lib比静态库的lib要小很多。.h是开发用的,.lib是引导调用的,.dll是真正的程序。在头文件中加入头文件,源文件中加入源代码。

2023-04-04 22:36:39 1675 1

原创 C语言 文件操作

将被复制文件的数据先一点一点保存到buffer数组中,再将buffer数组中的数据写入到目标文件,直至被复制文件中的光标到达尾部。用文件指针打开被复制文件和目标文件的缓冲区,再建立一个buffer数组充当中间缓冲区。这里的文件名后缀虽然是txt文本文件,但不能通过拓展名看文件本质。修改前 需要用fseek()函数 重新定位。也可以用rewind() 使光标回到开头。关闭文件流的函数:fclose()从当前位置偏移0,然后改为'8'。打开文件流的函数:fopen()

2023-04-04 13:06:40 385

原创 C语言 共用体

char b;union aa h;h.a=65;printf("共用体大小%d\n",sizeof(union aa));

2023-04-03 19:30:30 174 3

原创 C语言 链表

先要根据数据找到下标,在根据下标删除节点。这里我们建的是一个单向链表。进去的是数据,出来的是节点。

2023-04-01 22:26:51 165 2

原创 C语言 结构体

目录定义一个结构体 定义一个结构体 用typedef重命名结构体数组: 结构体指针 结构体对齐 结构体与堆内存结构体位域使用 结构体的嵌套先温习一下之前学过的#define和enum枚举类型:创建结构体变量:创建结构体变量并赋初值:存取结构体成员值 用.操作符:注:不能直接给数组名赋值,因为数组名是一个地址常量,要通过strcpy来赋值。输入 输出:定义一个结构体 用typedef重命名结构体数组:创建结构体数组变量:排序:打印:直接封装BOOK

2023-03-31 22:29:04 263 1

原创 C语言 看图说话-静态库与动态链接库

静态库需要放到项目中,他会跟随项目一同打包为exe文件,所以如果exe用到的组件较多,那么他的文件体积会很大,并且每个程序的代码区都会有一份静态库,会造成空间浪费。他还不宜更新,在更新时要将所有程序都更新一遍,他的优点就是移植方便。动态链接库是独立在exe外边的,它属于资源共享,谁想用谁就调用它即可,并且升级也很简单,只要更新自己就行,因为不需要打包在exe文件内,所以文件体积也会较小。

2023-03-30 16:03:04 255 1

原创 C语言 看图说话-文件复制原理

文件复制我们先用fopen函数打开被复制文件和目标文件的缓冲区,在创建from和to两个文件类型的指针指向他们,我们还需创建一个buffer数组来当作中间的缓冲区。而后我们通过fread函数将在被复制文件中的数据先读到buffer数组中,然后再通过fwrite函数将buffer数组中的数据写入到目标文件,直至被复制文件内的光标到达尾部。

2023-03-30 15:55:24 297

原创 C语言 字符串-字符串键盘输入

getchar输入一个字符 (以回车结束输入回车会进入键盘缓冲区,在再次输入输出是不会让你继续输入,会直接打印回车)输入一个字符 输入完立刻结束 但是显示出你的输入字符。输入一个字符 不显示 不用回车结束 输入完立刻结束。

2023-03-30 12:44:09 1796 1

原创 C语言 字符串-字符串类型转换

atof():将字符串转换为双精度浮点型值。itoa():将整型值转换为字符串。atoi():将字符串转换为整型值。

2023-03-30 12:32:26 423 1

原创 C语言 字符串-字符串的匹配

搜索字符串在另一个字符串中首次出现的位置。

2023-03-29 22:12:58 1528

原创 C语言 字符串-字符串的比较

ASCII码值的比较 从头到尾一次比较。

2023-03-29 22:04:34 613

原创 C语言 字符串-字符串的拼接

strcat追加拷贝,追加到目标空间后面,目标空间必须足够大,能容纳下源字符串的内容。

2023-03-29 22:00:14 1339

原创 C语言 字符串-字符串的复制

strncpy_s(目标字符串的首地址,缓冲长度,被复制的字符串的首地址,,复制的长度)strcpy_s(目标字符串的首地址,缓冲长度,被复制的字符串的首地址)strncpy(目标字符串的首地址,被复制的字符串的首地址,复制的长度)strcpy(目标字符串的首地址,被复制的字符串的首地址)仿真字符串复制函数 strncpy。仿真字符串复制函数 strcpy。,这种复制方式更像是覆盖。

2023-03-29 21:48:30 3051

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除