自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 double free or corruption (fasttop)

*** Error in `./server’: double free or corruption (fasttop): 0x00000000013a5c20 ***======= Backtrace: =========/lib64/libc.so.6(+0x7c503)[0x7fc9282cc503]./server(_ZN4Json21DefaultValueAllocator18r...

2019-06-04 18:23:41 10601

原创 lua 补全IP地址位数

–IP地址补全172.0.0.1 —> 172.000.000.001local ip = '172.0.0.1';local aa = '.';function mysplit(inputstr, sep) if sep == nil then sep = "%s" end local t={} ...

2019-03-30 14:47:12 1668

原创 lua 创建文本,读取文本

创建文件夹os.execute("md lxw")--写文件local file = io.open("lxw.txt","w")file:write("happy")file:close()--读文件local file = io.open("lxw.txt","r")print(file:read('*line'))file:close()...

2019-03-30 14:39:41 4223

原创 排序——归并排序

归并排序:得到一个排序数组,先把它们划分为一个个有序的序列,再把每个有序的序列再一起归并起来,着就是归并排序。 代码如下:void mergearray(int arr[], int start, int mid, int end, int tmp[]){ int i = start; int j = mid + 1; int m = mid; in...

2018-09-12 14:51:30 240

原创 memcpy()函数,memmove()函数

memcpy()函数,memmove()函数的实现。

2018-09-07 14:31:22 248

原创 C++类型转换(static_cast,dynamic_cast ...)

标准C++中为了加强类型转换的可视性,引入了四种命名的强制类型转换操作符。 static_cast reinterpret_cast const_cast dynamic_cast为了更好的理解C++中的类型转换,我们先讲讲我们在C语言中的转换。#include<iostream>void test(){ int i = 2; double d...

2018-08-31 00:23:34 705

原创 模拟实现:strlen,strcat,strchr,strcpy,strcat...

模拟实现的字符串处理函数: strlen,strcat,strncat,strchr,strrchr,strcpy,strncpy1.strlen,求字符串的长度,不算‘/0’size_t mystrlen(const char *string){ const char *p = string; while (*p++) {} return(p - ...

2018-08-21 18:45:26 226

原创 sscanf,sprintf,fread,fwrite

sscanf 读取格式化的字符串中的数据定义函数 int sscanf (const char *str,const char * format,........); sscanf与scanf类似,都是用于输入,子是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。sprintf 指的是字符串格式化命令,主要功能是把格式化的数据写入某个字符串缓冲区中。定义...

2018-08-20 15:14:58 266

原创 ARP协议

ARP协议 ARP协议是是一个介于数据链路层和网络层之间的协议。 它工作在网络层。ARP协议建立了主机IP地址和MAC地址的映射关系 在网络通信时,源主机的应用程序应该知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址。 数据包肯定先被网卡接收到再去处理上层协议的,如果接受到的数据包的硬件地址与本机不符,则直接丢弃。ARP协议的工作流程 如下图是ARP的工作流程: ...

2018-08-20 14:21:00 223

原创 ICMP协议(ping命令,traceroute命令)

ICMP协议 ICMP协议是一个网络层协议。 我们在建立好网络通信的时候,肯定要进行网络是否通畅。我们知道IP协议并不提供可靠的传输,无法通过IP协议来反馈我们的网络是否通畅,TCP又是传输层的协议,并不能在这里使用,所以提出了ICMP协议。专门为了测试我们网络是否通畅。ICMP功能 1.确认IP包是否成功到达目的地址 2.通知在发送IP包过程中丢包的原因 3.ICMP也是基于IP协...

2018-08-19 23:52:52 11797

原创 网络层 IP协议、NAT技术

网络层:最主要的功能就是:在复杂的网络环境中确定一个合适的路径。如何在网络层中准确的找到合适的路径发送数据呢? 这就需要我们的IP协议了。IP协议基本概念: 主机:配有IP地址,但是不能进行路由控制的设备 路由器:即配有IP地址,又能进行路由控制 节点:主机和路由器的统称我们看下一个IP协议的格式: IP地址:网络号和主机号 网络号:保证相互连接的两个网段具有不同的标识...

2018-08-19 23:00:19 422

原创 I/O多路转接之select

系统提供select函数来实现多路复用输出/输入模型: 系统调用select是为了使一个程序监视多个文件描述符的状态变化,程序会停在select这里等待,直到被监视的文件描述符有一个或者多个文件描述符发生了状态改变。#include<sys/select.h>int select(int nfds,fd_set *readfds,fd_set *writefds,fd_set...

2018-08-19 00:48:17 180

原创 TCP 延时应答/捎带应答

延时应答 我们知道TCP中,有确认应答机制以保证数据的可靠传输。但是是不是接受方接受到数据就立即返回ACK应答呢?如果是这样,这时候的缓冲区中接收区的数据还没能够处理,缓存区的剩余大小就是窗口大小。但是如果我们延迟一会,等待缓存区中数据被处理,那么剩余的缓存区就会大些——这就是延时应答。ps:假设接收端缓存区大小为1M,一次接收到了500K的数据,现在缓存区中剩余大小为500。但如果我们...

2018-08-18 15:05:16 5044

原创 TCP 流量控制/拥塞控制

流量控制——TCP支持根据接收端的处理能力,来决定发送端的发送速度。我们知道TCP在接受方有接受缓存区,如果接受缓存区接受满了,会造成什么呢? 流量控制:如果接收端的接受缓存区满了,就接受不了数据了,而发送方还一直的发送数据段给接受方。接受不了就会导致丢包的情况,而丢包,就会导致丢包重传(快速重传的机制)等等一系列连锁的反应。会大大的增加网络复杂情况。解决: 1.TCP中规定,...

2018-08-18 14:44:45 313

原创 malloc/calloc/realloc动态内存分配

malloc、calloc、realloc ,都是动态分配内存的函数,如下图是这三个函数的功能:

2018-08-17 17:55:59 345

原创 网络编程面向字节流—粘包问题

粘包:通俗的讲,在我们买包子的时候,我们可以看到蒸笼中,每个包子之间都隔开了空间,或者是用纸把每个包子都隔离开了,不让它们粘在一起。如果让两个包子之间无缝隙的在粘在一起。当你买包子时,老板把一个包子装起来,另个一个包子的皮就会粘到你的这个包子来。两个包子都多了点,另一个少了点。包子不完整了,外观不完美了。同样的,在我们TCP面向字节流传输过程中,我们也会遇到这样的问题。粘包中的“包”指的是...

2018-08-17 16:40:17 385

原创 TCP 滑动窗口/快速重传机制

我们知道TCP有确认应答机制,对每一个发送的数据段,都要给一个ACK确认应答,收到ACK后再发送ACK中携带的序列号。这样保证了可靠传输。但是有时数据往返的时间比较长时,性能就比较差了。 既然这样一发一收的方式性能较低,那么我们一次发送多条数据,就可以大大提升性能。TCP中提出了滑动窗口这个机制。这个机制是什么?我们看看… 窗口大小是指无需等待确认而可以继续发送数据的最大值,上面...

2018-08-17 12:11:19 7115 4

原创 栈和队列面试题

1.使用两个栈,实现一个队列。 栈:先进后出,且只能从栈顶pop出数据。 队列:先进先出,对头pop数据,队尾push数据。 代码如下:#include<stack>template<typename T>class MyQueue{public: void Push(const &data) { //

2018-08-16 16:57:18 373

原创 TCP 确认应答/超时重传机制

我们知道TCP协议是传输层协议,它是可靠传输,有连接的传输协议。那么它是依靠什么才能有这个功能的呢?确认应答机制(ACK) TCP将每个字节的数据都进行了编号,即为序列号: 每一个ACK都带有对应的确认序列号,意思是告诉发送者,我们已经收到了哪些数据,下一吃发送数据应该从哪里开始。 如上图,主机A给主机B发送了1-1000的数据,ACK应答,携带了1001序列号。告诉主机A,我已...

2018-08-16 15:01:27 7861

原创 TCP/UDP 协议格式

UDP协议格式: 16位UDP长度,表示整个数据报(UDP首部+UDP数据)的最大长度 即:一个UDP能传输的数据最大长度是64K 如果我们要传输的数据大于64K,那么我们需要在应用层手动分包,多次发送,并在接收端手动拼装 UDP没有发送缓冲区,应用层发送数据,由内核传给网络层协议进行后续额传输动作。 UDP有接受缓存区,但是接受缓存区不能保证和发送的的数据顺序一致,如果接受区缓存满...

2018-08-12 12:16:16 2746

原创 HTTP协议格式

HTTP请求格式:1.首行:【放法】+【url】+【版本号】2.header:若干行的键值对,每一行是一个键值对,键值对的键和值之间使用“:”来分割。header部分一个有几个键值对,这个是不能直接确定的,而是通过header最后的有一个空行作为header的接受标记3.空行:只包含一个 \n 作为header的结束标记4.body:数据格式取决于header中的content_T...

2018-08-11 22:14:53 322

原创 基于TCP协议服务器(线程/多进程)

基于TCP协议的服务器,线程,多进程版本。 为了解决服务器可以同时和多个客户端数据交互。代码如下: server.c#include<stdio.h>#include<stdlib.h>#include<sys/socket.h>#include<netinet/in.h&amp

2018-08-11 14:29:03 328

原创 基于TCP协议的回显服务器

基于TCP协议的回显服务器,简单的只有一个连接客户端。服务器流程: 1.创建文件描述符sock,并初始化 sockaddr_in ip地址和端口号 2.bind() 绑定文件描述符 3.accept() 阻塞等待客户端连接,返回新的文件描述符 newsock 4.循环读写客户端请求和响应 server.c#include<stdio.h>#includ...

2018-08-10 15:29:35 967

原创 TCP流程

TCP详细流程。

2018-08-09 09:11:26 3971

原创 IP地址转换函数

IPv4的socket网络编程中,sockaddr_in中的成员struct in_addr sin-addr 表示32位的IP地址,但是通常我们使用的是点分十进制的字符串表示IP地址,那么这两个如何转换呢?#include<arpa/inet.h>字符串转in_addr的函数:int_addr_t addr_t inet_addr(const char *strptr);...

2018-08-07 16:06:10 4103

原创 简单的UDP实现

根据UDP协议的特性,我们实现一个简单的回显服务器。UDP协议: 传输层协议 无连接 不可靠 面向数据报服务器代码:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<sys/socket.h>#include&lt

2018-08-07 12:47:12 2604

原创 Socket——API

socket常见API:// 创建 socket ⽂文件描述符 (TCP/UDP, 客户端 + 服务器)int socket(int domain, int type, int protocol);// 绑定端⼝口号 (TCP/UDP, 服务器)int bind(int socket, const struct sockaddr *address,socklen_t address...

2018-08-06 16:03:00 479

原创 网络编程简单基础知识

一,IP协议:它在源地址和目的地址之间,传送一种称为数据包的东西,它还提供对数据大小的重新组装功能,以适应不同的网络对包大小的要求。(源地址IP:发送方IP 目的地址IP :对方,接受方地址)现在有两种版本:IPV4,IPV6 IPV4:4个字节,32位整数 IPV6:8个字节,64位整数 由于基于IPV4的应用很多,IPV4还是目前的主流。、、、、、、、、、、、、、、、、、、、...

2018-08-06 15:18:45 340

原创 Linux内核中,进程的七种状态

Linux内核中,运行一个进程,会因为各种因素,进程会处于何种状态。 有如下几种状态:1.用户运行态:用户层面,由用户执行程序,执行与等待结果过程。2.运行态:CPU处理进程任务并返回运行结果3.僵尸态:进程运行完,但是没有进行资源回收,编程僵尸进程4.可中断睡眠:可中断的睡眠状态的进程会睡眠直到某个条件变为真,如产生一个硬件中断、释放进程正在等待的系统资源或是传递一个信号都可以...

2018-08-06 13:16:44 4179

原创 杂谈网络相关操作系统指令(netstat,ping等)

netstatpingttlnetstat(选项) 该指令用来打印Linux中网络系统的状态信息: -a或–all:显示所有连线中的Socket; -A<网络类型>或–<网络类型>:列出该网络类型连线中的相关地址; -c或–continuous:持续列出网络状态; -C或–cache:显示路由器配置的快取信息; -e或–exten...

2018-08-06 12:41:31 201

原创 TCP/IP五层模型

TCP/IP是一组协议的代名词,它包括许多协议,组成了TCP/IP协议簇。它是把OSI七层模型简化成了五层模型。每一层都呼叫它的下一层所提供的网络来完成自己的需求。应用层:负责应用程序间的沟通。如:简单电子邮件传输(SMTP),文件传输控制协议(FTP),网络远程访问协议(Telnet)等。传输层:负责两台主机之间的数据传输,如传输控制协议(TCP),能够保证数据可靠的从源主机发送到目标主...

2018-08-06 12:11:58 5543

原创 OSI七层模型

OSI(Open System interconnection,开放式系统互连),七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义,一个规范,它把网络从逻辑上分成了7层。 OSI七层模型的最大优点是将服务,接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整,通过七层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。应用层:主要负责对软件提供接口以使程序能使用网络...

2018-08-06 11:50:21 248

原创 操作系统——信号(2)

操作系统中,信号的产生可以告诉系统要去执行某个操作。操作系统中有默认的信号处理函数。我们也可以更改默认的信号处理函数,由我们自己写。——信号捕捉我们先来看看信号在内核中是怎样的: 信号对于操作系统来说,分为3类: 1.阻塞信号 2.未决信号 3.忽略每个信号都有两个标志位分别为阻塞(block)和未决(pending),还有一个函数指针表示处理动作。 信号产生时,内核在进程控...

2018-08-04 12:34:46 451

原创 Linux——线程 五 (条件变量)

条件变量: 当一个线程互斥的访问某个变量时,它可能会发现自己要完成某个操作需要某个共享变量达到条件。否则会进入阻塞。(就比如说,当前有个判断 : a = 0 ,线程1要执行1/a,需要的条件是a不等于0,现在线程1只能阻塞等待着a变量的改变。 这时需要通过线程2去改变共享变量a的值)我们先看一下条件变量的API:条件变量: 1.定义条件变量:pthread_cond_t cond...

2018-08-03 11:59:43 195

原创 Linux——线程 四 (信号量)

线程中的信号量和进程中的信号量的作用相同,都是用于同步操作,达到无冲突的访问共享资源的目的。但是它们也是有一定的区别的。线程中的信号量通过参数的不同,也可以在进程间使用。 和semget() 函数创建的信号量不同,线程中的信号量可以使两个线程进行同步。我们先看一下线程中信号量的API及其参数: #include <semaphore.h>1.定义信号量 sem...

2018-08-03 11:44:24 231

原创 操作系统——生产者消费者模型

生产者消费者模型在操作系统中,是很常见的模型之一。它们之间的关系,生产者负责生产产品,消费者负责消费产品。 “产品”是它们的关联属性。 依照我们的操作系统理念。这个产品就是共享区。 我们把这块共享区设置成队列,内存块,都是可以的,我们把该共享区称为“仓库”。看一下模型: 生产者消费者模型中,最重要的性质: 1.生产者与消费者是同步的关系 2.生产者与生产者之间是互斥的关系 3....

2018-08-03 10:31:44 1086

原创 Linux——读写锁

Linux下,为了线程安全,为我们提供了很多种锁。读写锁: 我们在编写多线程的时候,我们可能需要经常去读取某个共享数据变量,但是相对要改写这个变量的机会相对较少。在读的过程中,往往伴随着查找的操作,中间耗时很长,给这种代码加锁,会极大的降低我们程序的效率。所以提出了读写锁。注意:写独占,读共享,写锁优先级高例子:4个读线程,4个写线程#include<stdio....

2018-08-01 20:17:39 1423 1

原创 Linux——线程 三 (互斥量)

我们都知道每个线程都有自己独立的栈空间,自己使用的变量地址也在栈空间内。但是有时候,线程访问的变量都需要线程共享,这些变量称为共享变量,通过数据共享完成线程之间的交互。 我们在进程中了解到,多个进程同时访问一个共享变量的时候,会引发很多问题。所以进程之间需要访问共享变量的时候,需要互斥。而对应的,我们线程访问共享变量,也需要这样的互斥操作。我们从一个卖票系统看看,如果没有使用互斥相关操作...

2018-08-01 18:56:21 180

原创 Linux——线程 二 (等待与分离)

线程等待: 为什么需要线程等待? 1.已经退出的线程,其空间没有被释放,仍然在进程的地址空间内 2.创建新的线程不会复用刚才退出的线程地址空间我们知道进程内至少有一个线程作为执行单位,当我们进程退出了,意味着我们的线程也退出了。但是进程内有多个线程时,我们只想结束掉其中的某一个线程时,我们该如何做呢?系统为我们提供了下面几种方式: 1.从线程函数中直接调用 return ,这种方法对主...

2018-07-31 16:20:49 173

原创 Linux——进程间通信——信号量

信号量是进程间通信方式的其中一种,那么为什么存在信号量这种机制呢?信号量主要应用于同步互斥操作,先来了解一下,同步和互斥是什么? 同步:多个进程需要相互配合才能完成一项任务 互斥:1.由于各个进程都要访问共享资源,而且这些资源需要排它使用,因此各个进程间需要竞争使用这些资源,我们将这种关系称为进程的互斥。 2.系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或者互斥资源 3...

2018-07-31 14:33:09 284

空空如也

空空如也

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

TA关注的人

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