自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

flameboy的博客

喜欢交朋友,相互交流、相互学习。

  • 博客(63)
  • 收藏
  • 关注

原创 《UNIX网络编程 卷2:进程间通信》笔记

第一部分 简介IPC是进程间通信(interprocess communication)的简称。1.IPC三种类型的持续性 2.Posix IPC 和 System V IPC两种标准的进程通信SYSTEM V进程通信。包含消息队列、共享内存和信号量。 POSIX 进程通信。新标准的进程通信。系统为每一个IPC对象保存一个ipc_perm结构体,该结构说明了IP...

2018-06-08 19:24:20 948

原创 《UNIX 网络编程 卷1:套接字联网API 》笔记

第一部分 TCP/IPTCP是一个复杂、可靠的字节流协议,而UDP是一个简单、不可靠的数据包协议。理解connect、accept、close函数 TIME_WAIT状态最长分节生命期:2MSL。TIME_WAIT状态存在的两个理由: 1.可靠地实现TCP全双工连接的终止。 2.允许老的重复分节在网络中消逝。端口号:16位。范围0~65535。 0~10...

2018-05-22 17:33:28 939

原创 《TCP/IP》笔记

IP头部大小占20个字节生存时间TTL(Time To Time) 防止数据包在网络上环回,即无限循环跳转。每经过一个节点,TTL都会-1,当它为0时,则该数据报被丢弃。 Linux 下 输入traceroute + IP或者网址 可跟踪经过的路由跳数情况MTU(最大传输单元) MTU分片例子:源端口和目的端口:都为16位,范围 0~65535。**序列号:**...

2018-05-08 00:03:53 408

原创 H264和H265 RTP封包解包

学习H264和H265封包解包时浏览过的博客的链接如下:H264H264基础及RTP分包解包H264 RTP封包原理RTP H264注意点(FU-A分包方式说明)H265H265 Nalu类型详细解析H265 Nalu类型判断及 sps 数据解析H265封装成RTP流(一)H265封装成RTP流(二)...

2020-06-06 15:09:11 1928

转载 解决哈希冲突的方法

转载自:https://www.cnblogs.com/wuchaodzxx/p/7396599.html1. 开放定址法(再散列法)1.1 线性探测再散列1.2 二次探测再散列1.3 伪随机探测再散列2.再哈希法3.链地址法4.建立公共溢出区5.优缺点比较5.1开放散列(open hashing)/ 拉链法(针对桶链结构)5.2封闭散列(closed hashing)/ 开放定址法通过构造性能良好的哈希函数,可以减少冲突,但一般不可能完全避免冲突,因此解决冲突是哈希法的另一个

2020-05-30 15:59:13 651

原创 linux和windows下动态链接库调用类

LibSo.h#pragma oncetypedef void* HANDLE;typedef void* ProcAddr;#include <string>namespace COMMON{ namespace UTILITY { class LibSo { public: LibSo(); virtual ~LibSo(); static HANDLE LoadLib(const std::string& path); st

2020-05-21 19:34:00 492

原创 linux和windows通用时间类

这个时间类功能主要是用来获取系统毫秒时间、时区、当地时间,以及对传入的时间的转换,适用于linux和windows。TimeUtility.h#pragma once#include <string>#pragma once#include <string>namespace COMMON{ namespace UTILITY { class TimeUtility { public: TimeUtility(); ~TimeUtility(

2020-05-19 19:08:47 440

原创 自己写onvif视频模拟器时写的Makefile

MODENAME = INFRTPServerCC = gccCXX = g++OUTPUT = ./OBJ_MAIN = ../BIN_PATH = $(OBJ_MAIN)bin/LIB_PATH = $(OUTPUT)lib/OBJDIR = $(OBJ_MAIN)obj/PROGRAM = $(BIN_PATH)$(MODENAME)PREFIX = ./...

2020-04-23 16:23:22 383

原创 Makefile模板之生成动态库

选项说明:-Wall 选项 :可以打印出编译时所有的错误或者警告信息。变量没有初始化,类型不匹配,没有使用的变量或者类型转换错误等警告提示。-fPIC 选项:适用于动态连接,作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code), 则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意 位置,都可以正确的执行。这正是共...

2020-04-23 16:03:10 1812

原创 结合boost库实现的定时任务类

结合boost库实现的定时任务类WorkEvent.h#pragma once#include <mutex>#include <condition_variable>namespace ASYN_WORK_NVR{ class CWorkEvent { public: CWorkEvent(); ~CWorkEven...

2020-04-22 14:45:03 744

原创 linux 下单网卡批量添加多个IP地址脚本

linux所有网卡的配置文件都保存在 /etc/sysconfig/network-scripts 目录中,一个网卡对应一个配置文件。只需复制一份,修改其中的DEVICE和IPADDR字段就可以。配置完成后重启网卡(命令:service network restart)即可。#! /bin/sh#批量添加IP脚本#网络文件 填写网卡路径networkfile="/etc/sysconf...

2020-04-15 16:02:15 881 1

原创 任务线程池的封装

Semaphore.h#pragma once#include <mutex>#include <condition_variable>#include <atomic>namespace ASYN_WORK_NVR{ class Semaphore { public: Semaphore(); ~Semap...

2020-01-11 15:22:16 155

原创 异步任务线程封装笔记

Task.hnamespace ASYN_WORK{ class CTask { public: CTask(void); virtual ~CTask(void); virtual void Do(); virtual void Cancel(); };}Task.cpp#include "Task.h"names...

2020-01-11 14:20:03 145

原创 boost库的IO服务线程池封装笔记

BoostAsioSocket.h#pragma once#include <string>#include <boost/asio.hpp>#include <boost/enable_shared_from_this.hpp>#include <boost/bind.hpp>#include <boost/smart_ptr.h...

2020-01-11 11:41:35 321

原创 《C++中文版Primer 第五版之C++11的新特性》

c++11新特性总结1. long long 类型c++11新增加了long long 类型,在x86平台下为64位。2. 列表初始化在c++11新标准中,增加了使用列表初始化来初始化变量,即用花括号{}来初始化变量。int value = 0;int value = {0};int value(0);int vaue{0}; //c++11新特性当用于内置类型的变...

2019-12-15 13:47:35 539

原创 Linux和Windows遍历磁盘所有文件

#ifdef WIN32#include <io.h>//获取特定格式的文件名void GetPlaybackFile::getAllFiles(std::string path, std::multimap<std::string, std::string>& mapfiles, std::string format){ long hFile =...

2019-07-25 16:44:11 386

原创 《Effective C++》笔记

条款1:视C++为一个语言联邦:C、Object-Oriented C++、Template C++、STL。条款2:尽量以const,enum,inline替换#define。对于单纯的常量,最好以const对象或enums替代#define对于形似函数的宏,最好用inline函数替代#define条款3:尽可能使用const。将某些东西声明为const可以帮助编译器侦测出错误的...

2019-01-11 11:24:01 135

原创 常见的加密算法分类

加密算法介绍:一、对称加密算法DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合。3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高。AES 算法基于...

2018-06-17 17:08:26 1851

原创 守护进程(Daemon)的创建

(1)调用fork让程序转入后台运行。(2)脱离终端。 用setsid设置会话组长。(3)再次fork以避免无意中获得新的控制终端(4)改变工作目录和文件创建模式掩码 chdir(“/”) 和 umask(0)(5)关闭所有非必要的文件描述符。将0,1,2描述符转到null文件中。for(i=0;i&amp;amp;lt;1024;i++){ close(i);}open(...

2018-05-30 16:40:55 203

原创 有个服务器的路由表如下,网卡ens18的IP地址为199.201.71.1,访问199.201.68.25时,底层数据的数据是怎么一步步发送到出去的?访问14.215.177.38又是如何的?

将目的IP 199.201.68.25与路由子网掩码 255.255.252.0 进行与操作,得到的值与该路由的子网相同,因此这类ip在同一网段。查看ens18的ARP缓存中是否存在199.201.68.25的MAC地址,如果存在则直接发送数据;否则,发送ARP广播请求199.201.68.25的MAC地址,199.201.68.25响应ARP请求,缓存中就会保存目的IP和MAC地址,此时可以...

2018-05-22 16:34:05 3026

原创 有一个HTTP的服务器,通过浏览器访问的时候发现打不开的页面(80端口),怎么去抓包分析?步骤和存在的可能原因?

原因:.可能80端口本身无法访问或者被占用。网站无法打开情况发生的原因较多,可能是由于路由或电脑导致,可能是由于服务器问题导致。 (1)ping该网络,如果能通说明网站是没有问题的,如果失败则可能是网络原因,也有可能是网站问题,逐一排查;如果能打开其他网站,则网络没有问题。 (2)查看抓包中是否存在TCP的三次握手,否则可能是TCP连接没有成功,可能是网站问题。 (3)查看建立连接或者发...

2018-05-22 16:31:32 5029

原创 ping如果出现“no route to host”,“目的主机不可达”等错误原因?

no route to host:直接原因是没有配置好默认网关地址,计算机上的路由表找不到到目标ip的路。绝大多数情况是DHCP无应答。目标主机不可达:网络本身就没有连接,防火墙没关、也有可能对方主机没有开,也可能对方主机限制了响应ping消息的响应,很多主机不让别人ping的。...

2018-05-17 21:42:57 21346

原创 DNAT是什么?

SNAT,DNAT就是对数据包的源地址和目的地址进行修改,并且保存修改前后的映射关系,并且根据需要进行还原操作。 SNAT:出去的时候改 变原地址(snat),回来的时候改变目的地(un_snat)。 DNAT:进来的时候改变目的地址(dnat),出去的时候改变源地址 (un_dnat)。例如回环,就用到了SNAT和DNAT。例如: src 192.168.1.2(client) ,dn...

2018-05-17 21:42:06 24061 1

原创 有一台服务器,通过netstat -an命令看到大量状态SYN_RCVD的连接,可能发生的原因是什么?

主要有两种可能: 1.对方(请求方或客户端)没有收到服务器发送的[SYN,ACK]包(一般是由于网络结构或安全规则限制导致(SYN,ACK)包无法发送到对方)。2.对方收到了[SYN,ACK]包却没有ACK。 这种情况分两种可能,一是对方程序有意这么做,如SYN Flood类型的DOS/DDOS攻击;二是对方收到的[SYN,ACK]包不合法,常见的是SYN包的目的地址(服务地址)和应答[SY...

2018-05-17 21:40:59 4679

原创 建立TCP连接的时候,syn包什么情况下会被对端rst?

1.访问的服务器端口未打开访问的主机对应的端口没有开放,就会回RST。2.请求超时例:主机A向主机B发送SYN信号,想连接6666端口,主机A设置了设置了recv的超时时间为100ms,如果在100ms内还没收到主机B的ACK和SYN回复,则主机A发送了RST拒绝进一步发送数据。3.服务端提前关闭socket例如,客户端发了两个请求,服务器只从buffer 读取第一个请求处理完...

2018-05-17 21:39:49 3736

原创 《Linux命令行与shell脚本编程大全》笔记二

第十五章 呈现数据1.Linux的三个标准文件描述符标准输入(0)STDIN ,标准输出(1)STDOUT ,标准错误(2)STDERR2.重定向输出重定向到文件描述符时,必须在文件描述符数字前加一个 &amp;amp;amp;amp;amp;amp;amp;临时重定向: 例:永久重定向:exec 告诉shell在脚本执行期间重定向某个特定文件描述符。例:#exec 1&amp;amp;amp;amp;amp;amp;gt;testoutexec

2018-05-16 17:25:45 410

原创 MySQL多表查询

1. 嵌套查询 主要用于顺藤摸瓜式的从另一张表查出本表某些字段的具体的值。 例如,Dept表只有部门编号,如果想要查出部门的名称就要使用另一张表(Emp)。- 2.内联结查询笛卡尔积。(a,b)×(1,2)= (a1,a2,b1,b2)如果将表看做集合,每个元素就是一个记录,则表和表的笛卡尔积就是记录×记录的组合。多表查询的内联结查询通常要生成笛卡尔积然后再加上条件约...

2018-05-15 23:29:03 253

原创 《Linux命令行与shell脚本编程大全》笔记一

第一章 初始 Linux shellLinux内核主要四种功能:1.系统内存管理 2.软件程序管理 3.硬件设备管理 4.文件系统管理shell:交互工具。第三章 基本的bash shell 命令1.man:查系统手册。2.cd:切换目录。绝对文件路径:从“\”目录开始访问路径。可用 pwd 查看当前目录绝对路径值。相对文件路径:从当前目录开始,路径不以“...

2018-05-14 22:24:39 2791

原创 数据库的三大范式3NF

NF是normal form,是数据库设计的原则。1、1NF要求每个字段都是原子不可分的。假如学校要建立一个所有学生信息的数据库,有一个字段是学生的家庭住址。字段如下: 中国湖南省邵阳市隆回县顺子镇王炸村1号。这个字段可以切割成4个字段:国籍,省份,市,具体地址2、2NF要求每张表都要有一个主键,其它记录完全依赖主键。例如,如果花名册里只有名字,没有学号,则重...

2018-05-10 21:25:38 12667

原创 MySQL数据的基本操作

一、MySQL数据库比较普遍使用的一种数据库,是一种开源的关系型数据库。1.数据库的常用概念字段:相当于excel表里的列。 记录:一行称为一条记录。2.mysql数据库的安装和启动mysql是一种C-S架构型的数据库,服务器存放数据,客户端对服务器的数据进行SQL操作,两者使用socket通信。服务器一般用文件来存放数据,Linux系统下服务器的数据具体位于/var/l...

2018-05-10 21:18:54 260

原创 抓包工具tcpdump的常见用法

常用选项: -s :指定监听的数据包大小。 -c:指定要抓取的包的最终数量。 -i:指定tcpdump要监听的接口。 -n:对地址以数字方式显式,否则显式为主机名,也就是说-n选项不做主机名解析。 -nn:除了-n之外,还把端口显示为数值。 -w:指定监听数据包写入文件。常用输出项: -XX:以16进制和ASCII方式输出包的头部数据。 -vvv:很详细的输出(想要详细的信息加...

2018-05-09 23:21:50 1545 1

原创 简易实现unique_ptr智能指针

c++11的unique_ptr智能指针: 一旦创建,就指向那块内存,以后再也不能让其它的智能指针指向同一块内存。 这个指针实现比较简单,只需定义一个类的实例时,自己类内部删除拷贝构造函数和删除赋值运算符重载函数就可以了。#include &lt;iostream&gt;using namespace std;template&lt;typename T&gt;class muniq...

2018-05-08 21:14:45 1233 2

原创 简易实现shared_ptr智能指针

shared_ptr智能指针与auto_ptr智能指针不同的是,拷贝构造或赋值后,原来的指针仍然能够使用。 原因是这种指针用一个引用计数来计算有多少个指针指向同一个空间,拷贝构造和赋值,都会让计数+1,智能指针析构的时候计数-1,计数为0才释放内存。所以根据这几点可以自己实现shared_ptr智能指针的功能。#include &lt;iostream&gt;using namespa...

2018-05-08 21:07:00 728 1

原创 简易实现auto_ptr智能指针

智能指针能够自动释放动态内存的指针。主要的机制就是用一个类来将指针包裹起来,然后在类的实例析构的时候自动释放内存。今天自己实现C++标准库的传统的auto_ptr智能指针。如果不是自己编写的智能指针,运行时要加 -std=c++11选项,因为c++11标准里定义了智能指针。#include &lt;iostream&gt;using namespace std;template&lt...

2018-05-08 20:54:58 227

原创 线程池的实现(Linux系统)

一、线程池 一开始就创建多个线程,让它们一直存活。一旦有任务就直接交给线程去执行。线程执行完任务后回到线程池也不销毁。二、实现借助第三者来传递任务。发布任务的人不要知道由谁来执行。执行任务的人不要知道谁发布的,第三者就是一个队列。发布任务的人将任务插到队列(进入队列尾部),线程从队列中取出第一个节点,然后执行任务。任务用函数和参数描述,使用函数指针和一个参数来保存。#includ...

2018-05-07 23:14:14 202

原创 内存映射实现文件拷贝

文件描述符文件描述符用来识别一个打开的文件,文件的修改读写关闭等等都以文件描述符为依据。它是一个非负整数。在用open函数打开文件后,返回一个文件描述符。 open如果失败,则返回-1。因此通常用fd==-1来判断是否打开失败。保留的文件描述符一般会保留3个文件描述符,0—标准输入端,1—标准输出端,2—标准错误端。 如果关闭这其中的一个,则新打开的文件的描述符就是被关...

2018-05-07 22:51:45 1388

原创 系统大小端模式的判定及转换

系统的存储模式有两种:大端模式,和小端模式 大端模式:(Big_endian):字数据的高字节存储在低地址,低字节存储在高地址 小端模式:(Little_endian):字数据高字节存储在高地址,低字节存储在低地址举例子说明一下: 如果a=0x12345678,大端模式输出a 为0x78564321 小端模式输出 0x12345678#include &amp;lt;stdio.h&amp;...

2018-05-06 21:57:34 452

原创 哈希表(解决循环冲突链表问题)

哈希表 哈希表是基于数组的顺序结构,每一个存储目标都会存在一个key值,哈希表也称为散列表。为解决冲突问题(多个目标用hash函数计算出相同的位置),本代码用了拉链法,另外本代码还解决了字符串插入哈希表循环冲突拉链的问题。#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#include &lt;string.h&gt;#de...

2018-05-06 21:06:46 2165 1

原创 树的深度和广度遍历

#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#include &lt;assert.h&gt;#define MAX_SIZE 100 //队列的最大容量/*树:树是一种自定义结构.由n(n&gt;0)个节点组成,有且只有一个节点作为树根.n-1个节点组成一个子树.树是一种递归定义.节点为0的树称为空树树节点由存储数据和指向其...

2018-05-06 20:18:49 5295

原创 无向图邻接表

#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#define MAX_POINT_NUM 10 //最大顶点数/*图存储方法:1.邻接矩阵(有向图)2.邻接表3.多重邻接表3.十字交叉链表(有向图)*///下面是无向图邻接表的实现的方法//邻接节点类型typedef struct arcnode{ i...

2018-05-06 19:52:43 14440

空空如也

空空如也

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

TA关注的人

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