- 博客(46)
- 收藏
- 关注
原创 DHCP协议浅析
定义:动态主机配置协议,主要在一些大型局域网络环境中,集中管理和分配IP地址,提升地址的使用效率。DHCP协议采用CLIENT-SERVER方式实现,而且DHCP协议是基于UDP层之上的应用,DHCPCLIENT将采用端口号68,DHCPSERVER采用端口号67进行交互。DHCP的三种分配IP机制:自动分配方式:DHCP服务器为主机指定一个永久性的IP地址。客户端一旦第一次成功租用IP过后,后面即可永久性使用次IP地址。 动态分配方式:DHCP服务器为主机指定一个具有时间期限的IP地址...
2020-08-24 13:46:13
1330
原创 TR069浅析
何为TR069?TR069,全称“TechnicalReport069”是由DSLForum修订的一份技术规范,该规范是应用层的管理协议,命名为“CPE广域网管理协议”。TR069定义了一套全新的网管体系结构,包括管理模型,交互接口及基本的管理参数,能够有效地实施对家庭网络设备的管理。协议栈 CPE/ACSManagementApplicantion 用于CPE广域网管理协议的CPE和ACS RPCMethods ...
2020-08-20 09:32:54
5500
原创 TCP的三次握手/四次挥手 详解
三次握手的过程:TCP 连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP 窗口大小信息。 1. 客户端向服务器发送一个SYN置位的TCP报文,其中包含连接的初始序列号x和一个窗口大小(表示客户端上用来接收从服务器发送来的传入段的缓冲区的大小)。 2. Server收到数据包后由标志位SYN=1知道Client请求建立连接 ...
2018-09-06 21:28:57
345
原创 TCP如何保证可靠性传输
校验和 在数据传输的过程中,将发送的数据段都当做一个16位的整数。将这些整数加起来。并且前面的进位不能丢弃,补在后面继续相加,最后取反,得到校验和。 发送方:在发送数据之前计算检验和,并进行校验和的填充。 接收方:收到数据后,对数据以同样的方式进行计算,求出校验和,与发送方的进行比对。 注意:如果接收方比对校验和与发送方不一致,那么数据一定传输有误。但是如果...
2018-09-06 21:23:22
968
原创 解析socket编程的相关函数
1.什么是套接字一个完整的网络通信需要一个五元组来标识:协议、本地地址、本地端口号、远端地址、远端端口号。TCP用主机的IP地址加上主机上的端口号作为TCP连接的端点,这种端点就叫做套接字 流式套接字(SOCK_STREAM):TCP(The Transmission Control Protocol)协议。流式套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实...
2018-08-31 09:49:51
320
原创 如何编写TCP服务器
客户端逻辑(不要绑定端口号)1.用户输入数据,从标准输入输入一个字符串2.把这个字符串发送给服务器3.从服务器读取并返回结果4.把响应写到标准输出上 服务器逻辑(绑定端口号)1.启动(初始化)2.进入死循环(事件循环) a)从socket中读取请求(Request) b)根据Request的内容计算生成Response c)把Respo...
2018-08-31 09:39:44
750
原创 如何编写UDP服务器
客户端逻辑(不需要绑定端口号)1.用户输入数据,从标准输入输入一个字符串2.把这个字符串发送给服务器3.从服务器读取并返回结果4.把响应写到标准输出上 服务器逻辑(绑定端口号)1.启动(初始化)2.进入死循环(事件循环) a)从socket中读取请求(Request) b)根据Request的内容计算生成Response c)把R...
2018-08-31 09:31:21
658
原创 模拟实现Ping
PING (Packet Internet Groper),因特网包探索器,用于测试网络连接量的程序。Ping发送一个ICMP(Internet Control Messages Protocol)即因特网信报控制协议;回声请求消息给目的地并报告是否收到所希望的ICMPecho (ICMP回声应答)。它是用来检查网络是否通畅或者网络连接速度的命令。 作为一个生活在网络上的管理...
2018-08-31 09:07:22
1355
原创 vector list deque三者的区别与联系
vector将元素置于一个动态数组中加以管理,支持随机访问,数组尾部添加或移除元素非常快速。但是在中部或头部安插元素比较费时;vector底层动态维护了一段连续的空间,随着元素的加入,当容器中的元素存放满时,如果再要加入其它数据,vector的内部机制会自动的进行扩容以容纳新元素。 扩容: (1)配置一块新空间 (2)将旧元素一一搬往新址 ...
2018-08-20 10:54:33
503
原创 内联函数 && static成员函数
什么是内联函数? 内联函数是指用inline关键字修饰的函数。在类内定义的函数被默认成内联函数。 内联函数不是在调用时发生控制转移,而是类似宏替换,在编译时将函数体替换调用处的函数名。PS:一般在代码中用inline修饰,但是能否形成内联函数,需要看编译器对该函数定义的具体处理。意义: 内联是一种以空间换时间的做法 内联是用来消除函数调用时的时间开销。它通常用于频繁执行的函...
2018-06-12 18:47:56
488
原创 两个栈实现一个队列 / 两个队列实现一个栈(模板)
两个栈实现一个队列 #pragma once#include<stdio.h>#include<Windows.h>#include<assert.h>#include<iostream>#include<stack>using namespace std;stack<int> s1, s2;//两个栈s1和s...
2018-05-27 23:54:14
486
原创 实现最小栈的两种O(1)算法
最小栈的操作和普通栈的操作没有太大区别,唯一多了一个方法就是getMin()方法,这个方法是用来获取当前栈内的最小值。直接上代码:第一种:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<iostream>#include<stack>using namespace std;clas...
2018-05-25 17:23:52
895
原创 顺序栈和链式栈的基本操作
栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定...
2018-05-22 13:49:57
621
原创 const修饰函数参数,返回值,成员函数
一提到到const 关键字,我们首先想到的可能是const常量。但const的功能可不仅仅局限于此,它可以修饰函数参数,返回值,甚至函数的定义体。const是constant的缩写,“恒定不变”的意思。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。下面我们讲一下以下三种情况:1.const修饰函数的参数2.const修饰函数的返回值3.const修饰成员函数1.co...
2018-05-20 18:48:07
1977
原创 C++之实现日期类
通常我们想计算某一天到另一天的距离时,要是间隔太大,我们就回去利用网上的日期计算器去算。今天,这篇博客就是教我们如何去实现一个简单的日期计算器。想要去实现某个功能其实并不是很难,难点在于我们综合起来地去考虑闰年或者月份的天数这块。代码块:Date.h#define _CRT_SECURE_NO_WARNINGS 1#include<assert.h>#include<iost...
2018-05-18 15:14:15
433
原创 双向循环链表的基本操作
DLink.h#pragma once #include <stdio.h>typedef int DLinkType;typedef struct DLinkNode { DLinkType data; struct DLinkNode* _next; struct DLinkNode* _prev;} DLinkNode;DLinkNode* BuyNode(DL...
2018-05-15 19:37:34
270
原创 双向链表的基本操作(不循环)
什么是双向链表?双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。如图:双向链表的基本操作:头插,头删,尾插,尾删,任意位置前插入,任意位置后插入,查找节点。代码块:DLink.h#pragma once #include <stdio.h...
2018-05-15 18:26:38
521
原创 fork函数和vfork函数
fork函数:函数原型:pid_t fork(void); 返回值:父进程返回子进程id,子进程返回0;失败返回-1(失败的原因:1内存不够;2系统进程数量太多); 注意:fork之前,父进程独立执行,fork之后,父子两个执行流分别执行。但是父子进程谁先执行是由系统调度决定。 写实拷贝:父进程创建子进程后,子进程室父进程的副本; 父子代码共享,父子不写入时,数据也是共享。当任意一方试图写入时,便...
2018-05-12 13:05:20
284
原创 C++之多态
概念:多态指同一个实体同时具有多种形式。它是面向对象程序设计(OOP)的一个重要特征。多态的两个条件:1.父类的指针或引用2.调用的成员函数必须是虚函数的重写构成多态 ----->跟指向的对象有关不构成多态 ----->跟指针的类型有关代码块:#pragma once#define _CRT_SECURE_NO_WARNINGS 1#include<iostream...
2018-05-12 09:39:21
340
原创 UNIX系统文件IO函数
在一开始接触到Linux的时候,我们经常接触到的系统IO函数有下列这几个open()函数,write()函数,read()函数,lseek()函数,close()函数下面我们将逐个探究一下:open函数: 打开或创建一个文件库和函数原型:#include<fcntl.h>int open(const char* pathname,int flag, ... /*mode_t mode*...
2018-05-11 16:10:39
837
原创 C++之菱形继承与虚继承(含虚函数)
面向对象的三大特征:封装,多态,继承前面我们已经讲了继承的一些知识点,在这基础上,我们讲的时候再涉猎一些多态的只是。下面我们先接着上次讲有虚函数的菱形虚继承首先什么是虚函数。?虚函数:在类里面,函数前面有virtual关键字的成员函数就是虚函数。代码块:class base{public: base() { cout << "base()" << endl; ...
2018-05-06 10:21:07
1512
原创 C++之菱形继承与虚继承(无虚函数)
定义:设有一个父类A类,B类和C类分别继承它,然后再有一个D类继承B类和C类。这样就叫做菱形继承也叫钻石继承(Diamond inheritance)上代码块:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<iostream>using namespace std;class A{public...
2018-05-03 13:35:18
383
原创 C++继承关系之子类的六个成员函数
默认成员函数 在继承关系里面, 在派生类中如果没有显示定义下列六个成员函数, 编译系统则会默认合成这六个默认的成员函数。上图:这篇文章会详细介绍构造函数,析构函数,拷贝构造函数和赋值运算符的重载。因为另外两个在我们这个阶段基本上不用到,所以只要大概知道有这么个东西就行(说白了就是我也不会。。。)下面我们先讲:构造函数和析构函数构造函数和析构函数概念的东西就不用过多解释了吧...
2018-05-02 20:00:21
887
原创 C++之继承
概念:继承:在C++语言中,一个派生类可以从一个基类派生,也可以从多个基类派生。从一个基类派生的继承称为单继承;从多个基类派生的继 承称为多继承。三种继承权限方式: public protected private 1.Public和Protected前两种方式保持基类的所有成员的属性不变,且 2.派生类可以访问基类的public和protected成员,但仍然...
2018-05-01 18:51:37
206
原创 僵尸进程和孤儿进程的模拟实现及避免方法
首先我们要知道:在类UNIX操作系统中,子进程是通过父进程创建的,子进程再创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。概念:孤儿进程:当一个父进程由于正常完成工作而退出或由于其他情况被终止,它的一个或多个子进程却还在运行,那么那些子进程将成为孤儿进程。我们可以这样理解:一个父亲他走的很安详,但是他的众多子孙后代还没走,于是乎他们就成了孤儿。...
2018-04-29 22:27:03
633
原创 C++之 “引用”
“引用”用我们那的话叫 reference在搜狗百科上是这么解释的: 写文章时,有意引用 成语、 诗句、 格言、典故等, 以表达自己想要表达的思想感情,说明自己对新问题新道理的见解,这种 修辞手法叫引用。 当然我们今天要讲的不是这样的引用,讲的是C++语法上的引用。在C++的百度百科上是这么解释的: 引用引入了对象的一个同义词。引用就是某一变量(目标)的一个别名,对引用的操作与对变...
2018-04-28 20:02:27
248
原创 C++之动态内存分配 new/delete
提到C语言的内存分配,我们自然而然会想到标准库函数中的 malloc 和 free 来动态分配内存空间而在C++中,我们则是提供了运算符 new 和 delete ,来取代 malloc 和 free 进行动态分配内存空间。malloc/free和new/delete的区别和联系?1. 它们都是动态管理内存的入口。2. malloc/free是C/C++标准库的函数,new/delete是C++操...
2018-04-28 16:35:11
3186
原创 用栈实现括号匹配问题
基本思想:先封装好一个栈,然后输入我们的括号,比如 ([{}] ,然后让我们的左括号进栈,遇见右括 号,如果栈顶元素是与其相匹配的左括号,则出栈,若不是则说明匹配失败,返回。代码分析:stack.h#define _CRT_SECURE_NO_WARNtypedef char DataType;typedef struct stack{ DataType*top;...
2018-04-19 16:24:46
734
原创 Linux下的重要目录
了解以下Linux下的重要目录/proc, /sys, /SElinux, /home,/bin, /usr/lib, /usr/local, /var, /tmp,/root,/boot1./proc Linux内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件...
2018-04-14 07:47:23
167
原创 了解以下重要命令. du, df, top, free, pstack, su, sudo(sudo -, sudo -s), adduser, password
1.du命令:du [选项] 文件 (1)功能该命令是显示指定文件以及下的所有文件占用系统数据块的情况,如果没有文件,默认为是当前工作目录 -a 显示所有文件对系统数据块的使用情况 -b 显示数据块大小时以字节为基本单位 -c 除了显示文件对系统数据块的使用情况外还显示出文件的总和 -s 只显示文件数据块总大小,不显示文件名 -x ...
2018-04-12 20:22:59
320
原创 Linux下的增删查改操作的权限
Linux中的基本权限(r、w、x) 1、读(r/4):read对于文件来说,具有读取文件内容的权限;对于目录来说,具有浏览该目录信息的权限。 2、写(w/2):write对于文件来说,具有修改文件内容的权限;对于目录来说,具有删除、移动目录内文件的权限。 3、执行(x/1);execute对于文件来说,具有执行文件的权限;对于目录来说,具有进入目录的权限。上面...
2018-04-12 19:29:19
700
原创 在Linux下实现彩色进度条
实现彩色进度条,实际上就是输出一遍字符,刷新一下,再次输出重复这样的过程。在这里我们需要知道几点:彩色:终端的字符颜色的控制由转义字符实现。通过转义序列显示终端的颜色通常以“\033[”开头,以m来表示转义序列结束。但最重要的是我们在输出完之后要用“\033[0m”来关闭所有属性,否则之后的输出也会变成所设置的颜色。下面只列出本次代码所用到的转义属性。\033[0m 关闭...
2018-03-31 13:14:42
355
原创 Linux下调试函数-----gcc与gdb的使用
这篇博文主要讲下如何编写程序并使用gdb调试段错误(core dump) 何为gdb?---百度百科UNIX及UNIX-like下的调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具相比于VC、z的优点是具有修复网络断点以及恢复链接等功能。BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道...
2018-03-30 17:26:36
1149
原创 函数重载与缺省值
什么是函数重载?在相同的声明域中的函数名相同的,而参数表不同的,即通过函数的参数表而唯一标识并且来区分函数的一种特殊的函数。何时选择函数重载?当将要定义一组函数,使它们执行一系列的操作,但是它们是应用在不同的参数类型上的。此时我们可以选择重载函数。代码分析:#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>#include<...
2018-03-27 20:19:43
704
原创 无头单链表的逆置(头插法和三个指针法)
关于链表的逆置方法有许多,这里给大家讲述一下应用较为普遍的头插法和就地逆置法,解决问题的关键在于我们要学会自己画图去理解具体逆置的过程,有了思路,问题的解决自然就简单了很多。头插法:我的思路是先创建一个空结点pHead,然后让它指向NULL;然后定义三个指针变量,pCur是沿着原链表走,pPrev标记 pCur前一位依次把结点拆下来,插在pHead与pHead的next之间,循环至结束。代码:No...
2018-03-22 11:25:51
1764
原创 单链表实现约瑟夫环
何谓约瑟夫环?约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列,剩下最后一个人。举个例子:按照以上规则,最后剩下的是...
2018-03-15 23:08:25
572
原创 结构体-位段-联合体-枚举
什么是结构体(struct)?结构体是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构。(ps:数组是同一类型元素的集合)结构体可以被声明为变量,指针或数组等。 结构体的定义 一般形式: struct Tag {member list;}variable list;其中:struct为结构体关键字,Tag为结构体的标志, member list为结构体成员列表,variable
2018-01-09 14:56:11
625
原创 深度理解C语言------指针
在我们学习C语言的过程中,指针是不可或缺的一部分,也可以说是最难的一部分,今天让我们来近距离的去认识它,从此无所畏惧。。。什么是指针 在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。
2017-11-19 23:19:57
451
原创 模拟实现strstr
strstr这个函数它的类型是char*strstr(const char* ,const char * )说明它的两个参数类型都是char*,且皆为const ,即不可修改类型。思想:先定义char*str1为母串,char*str2为查找的子串,然后*p1为在母串中找到符合条件的字符的起始位置,之后向后移动变化的是*s,也就是说p1和s一起在母串走到符合条件的位置p1就不动了
2017-11-18 16:25:10
286
原创 栈帧——函数的调用过程
结构化程序的一个最基本的单元就是“函数”或者叫“过程”。在汇编这一层自然也相应的有支持这些概念的指令操作,如栈操作和栈帧的概念。我们知道,一个由C/C++编译的程序占用的内存分为以下几个部分:1、栈区(stack)— 由编译器自动分配释放 ,存放为运行函数而分配的局部变量、函数参数、返回数据、返回地址等 。
2017-11-05 20:24:24
699
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人