自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 资源 (1)
  • 收藏
  • 关注

原创 为什么要Time_wait

Time_wait啊,老哥们肯定会想,time_wait什么鬼? 为毛我主动断开tcp连接。发完最后一个ACK后不能直接断开连接啊,我能做的都做了。但是….. 老铁们你们想一下,ACK丢包是不会重传的,但是FIN呢? 最后被动关闭的一直要是收不到ACK它会怎么想,它肯定认为FIN包丢包了,那怎么样,重发呗。 重发之后呢,如果对端一直不会回复ACK,那么重传一定次数后就会发送重置报文段然后断开连接

2017-09-23 17:21:04 2738 1

原创 实现一个应用层的定时器T^T

定时器定时器常用于超时重传中,重传有俩种方式一种是快速重传一种是超时重传。这个快速重传指当收到同一个ACK包三次以上则代表丢包了,那么发送端就开始重发丢失的包,这个叫做快速重传RTT。RTO超时重传,这个一般指通过RTT的频率计算出来的一个定时器,只要这个定时器超时了那么我们就启动重传。那么这些机制是底层的机制,也就是系统自己实施的相应机制。那么我们可以自己从应用层上也可以实现重传机制。定时器

2017-09-28 13:09:41 489

原创 类内给出函数主体和类外给出成员函数主体区别

这个唯一的区别就在于类内成员函数主体编译器会尽可能优化为内联函数,而类外成员函数主体不会优化为内联函数。

2017-09-26 09:55:23 595

原创 c++抽象类

抽象类定义当类中有成员函数是纯虚函数的话该类就是抽象类,抽象类的纯虚函数不能给出定义只能给出声明即可。抽象类可以有成员变量,但是自己不能实例化抽象类的对象,但是它可以被继承,通过派生类对象来访问它的成员变量。另外只要为了多态声明的基类,析构函数都应该声明为虚函数,防止内存泄漏。 应注意的几个点: 1. 抽象类的所有纯虚函数在派生类中必须重写,否则派生类对象无法定义出来。 2. 纯虚类可以有构造

2017-09-26 09:22:46 807

原创 epoll高级应用之同时处理 tcp/udp 的服务器

理论同一个 ip+port可以同时的被tcp模块使用也可以同时被udp模块使用。它可以同时处理来自不同请求运输层协议的请求。当不同的数据到达时,应用只需在不同的缓存队列中读取数据即可。图/*server*/#include<stdio.h>#include <unistd.h>#include <fcntl.h>#include <arpa/inet.h>#include <sys/typ

2017-09-25 17:58:19 783

原创 论进程和线程的不同

我们应该去保持一个明确地认识对于线程。太多的人似乎带有对线程和进程的迷惑。以下的讨论并没有反应出当前Linux的目前状态,然后也是一次高级的讨论。 进程和线程仅仅只是一段上下文。 上下文仅仅是所有状态的一个集合。例如CPU状态(如寄存器状态)、MMU状态(页面状态)、权限状态(euid,egid)、还有各种通信状态(已经打开文件的状态,信号handler表的状态)。 传统地来说,进程和线程的不

2017-09-17 21:29:50 257

原创 多线程程序启动多少线程比较好

对于多线程来说启用多少个线程这个问题与程序是什么样的程序有密切的关系。 1. 如果是I/O密集型的话,程序的效率跟I/O阻塞有关,如果I/O阻塞比较少,那么效率就是最高的。 2. 如果是算术密集型的话,程序的线程数和CPU的核数有关,线程数目应与CPU核数密切相关。因为如果CPU数目和线程数目一样的话,这样CPU会尽可能的调度相应的线程,CPU的cache就不会浪费,对于算术密集型经常访问内存,

2017-09-17 18:53:49 869

原创 tcp的可靠性保证

校验和(校验数据是否损坏);定时器(一定时间内还没收到分组就会重传);序列号(用于检测接受的数据段是否是当前连接的数据段,防止上一连接的延迟数据段到达);确认(接收方告知发送方正确接收分组以及期望的下一个分组);重置(当接受到错误的数据段时会重置连接,错误的数据段指该数据段的序列号非正确序列号);

2017-09-16 23:02:53 284

原创 tcp/udp 区别

1.tcp基于连接与udp基于无连接2.对系统资源的要求(TCP较多,UDP少) ,tcp 包头最少20字节,udp只有8字节。3.UDP程序结构较简单4.tcp是基于字节流的,udp是基于数据报的。5.tcp是可靠传输,udp是不可靠传输

2017-09-16 22:51:41 295

原创 malloc/free 和 new/delete 区别

malloc/free是标准库函数,new/delete是c++运算符malloc/free只是动态分配内存/释放内存,new/delete除了分配内存还好调用构造函数和析构函数malloc分配内存的基本单位是字节数,new分配内存的基本单位是对象的个数malloc返回的是void*,new返回的是相应类型的指针。malloc调用失败返回NULL,new调用失败抛出bac_alloc异常ma

2017-09-16 21:21:43 171

原创 结构体和联合体的区别

结构体是多种数据类型构成的聚合数据变量。 联合体是也是多种数据类型构成的聚合数据变量。 结构体每个成员都有属于自己的存储空间,但是联合体的所有成员公有一个存储空间。

2017-09-16 20:57:08 453

原创 引用和指针的区别

1 引用在定义时必须初始化,指针没有要求2 指针本身就是一个对象有自己的存储空间,而引用不是对象,引用没有属于自己的地址空间,它的空间为所指向对象的空间。3 一旦引用被初始化后,就不能再指向其他对象,而指针可以改变指向。4 没有NULL引用,但有NULL指针。5 sizeof时含义不同,指针大小为32位下4 64位下8。而引用为所指类型大小6 引用自增时改变的是所指对象的值,而指针自增时改

2017-09-16 20:17:22 166

原创 c语言结构体对齐规则

1.第一个成员在与结构体变量偏移量为0的地址处。 2.其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。 //对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。 VS中默认的值为8 linux中的默认值为4 3.结构体总大小为最大对齐数(每个成员变量除了第一个成员都有一个对齐数)的整数倍。 4.如果嵌套了结构体的情况,嵌套的结构体对齐到自己的对齐数

2017-09-07 09:11:44 536

原创 红黑树

红黑树概念它是一个平衡树,查找效率为O(log2n),中序遍历时为有序序列。我只实现了unique_insert,对于equal_insert,stl是把键值相同的节点当做到该节点的右孩子。所以遍历muti_map时遍历一个键值对应的多个时值的时候,应该先find找到第一个K的位置,在调用count函数找到该K有多少个键值相同的节点。从第一个find返回第一个key位置的迭代器,然后每遍历一个节点,

2017-09-02 10:33:03 274

空空如也

空空如也

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

TA关注的人

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