自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 libpcap pcap_loop捕获包数据

pcap_loop, pcap_dispatch - process packets from a live capture or savefile处理抓取的数据包函数原型#include <pcap/pcap.h>typedef void (*pcap_handler)(u_char *user, const struct pcap_pkthdr *h, const u_char *bytes);int pcap_loop(pcap_t *p, int cnt, pcap_hand

2021-05-10 14:50:47 1921

原创 libpcap pcap_create()和pcap_activate()函数

在libpcap版本1.0之前,没有pcap_create()和pcap_activate()函数,获取实时捕获句柄需要通过pcap_open_live()获得。新版本中,通过pcap_create()和pcap_activate()来获得捕获句柄。使用libpcap 1.0之后的版本中,推荐使用新的函数。函数原型:pcap_t *pcap_create(const char *source, char *errbuf);pcap_create()用来创建一个包捕获句柄,参数source是网

2021-05-08 17:43:48 1911

原创 libpcap 抓取lo环路网卡的数据并存储pcap文件

采集lo网卡数据,简单的函数使用。pcap_open_live:打开一个捕获的句柄pcap_dump_open:抓的包保存到本地文件,给出保存路径名pcap_loop:从pcap_t中读包,直到中断或错误pcap_dump:抓取的包写入文件pcap_dump_flush:写文件从缓存到文件void CCapture::capWork(){ char *dev; pcap_t *pcapHand = NULL; char errcont[PCAP_ERRBUF_SIZ

2021-05-08 14:25:11 634

原创 libpcap pcap_findalldevs 获取网卡设备列表

函数原型:int pcap_findalldevs(pcap_if_t **, char *);returns 0 on success and -1 on failure./* * Item in a list of interfaces. */struct pcap_if { struct pcap_if *next; char *name; /* name to hand to "pcap_open_live()" */ char *description; /* te...

2021-05-08 11:33:52 2153

原创 C++文件操作-两个程序同时分别操作一个文件的读和写

两个程序同时操作一个文件的读和写。一个程序持续写入数据到文件中,另一个程序持续的读文件。处理过程中不能判断文件是否完整,即读文件操作可能需要等待写文件操作。处理过程中,按行读取,计算每一行的偏移量。读取一行时,设置偏移量,在读取。读文件操作执行到文件末尾时,关闭文件,然后重新打开文件,判断文件流状态是否可用。当文件有60秒时长没有写入文件时,就退出读写操作。 ifstream m_ifHandler; string m_runFilePath; int

2021-04-29 11:28:01 3511

原创 C++11 多线程thread的休眠sleep_for chrono

使用C++11中的thread和chrono来实现休眠控制.this_thread::sleep_for(seconds(2));除了seconds外,还可使用std::chrono::nanosecondsstd::chrono::microsecondsstd::chrono::millisecondsstd::chrono::secondsstd::chrono::minutesstd::chrono::hours#include <chrono>#incl

2021-04-26 17:09:05 7699

原创 C++11多线程thread原子操作atomic

原子操作,就是多线程程序中“最小的且不可并行化的”操作。通常对一个共享资源的操作是原子操作的话,意味着多个线程访问该资源时,有且仅有唯一一个线程在对这个资源进行操作。C++11中支持的原子类型有常用的可以使用atomic类模板,通过类模板,可以任意定义出需要的原子类型std::atomic<T> t;//C++11atomic_int total{0};void func(){ for (int i = 0; i < 100000; i++)

2021-04-25 14:55:18 409

原创 C++11 多线程thread的join和detach函数使用

join waits for the thread to finish its execution (public member function) detach permits the thread to execute independently from the thread handle (public member function) 对创建线程的两种操作:等待/分离,join/detach1.join():主线程会阻塞,当子线程执行结束后,主线程才会继续...

2021-04-20 14:55:55 1194

原创 C++11 多线程thread使用

void CTask1::work(){ while (true) { cout<<"Task1"<<endl; std::this_thread::sleep_for(chrono::seconds(1)); }}//static void work1();void CTask1::work1(){ while (true) { cout<<"Task0 static"<<.

2021-04-16 15:50:41 209

原创 python 打包

使用setuptools 打包。简单的安装脚本setup.pysetup.py from setuptools import setupsetup( name='Hello', version = '1.0', description = 'A simple example', py_modules = ['hello'])install命令把模块复制到PYTHONPATH指定的目录中python3 setup.py

2021-03-04 09:49:42 93 1

原创 python-在模块中添加测试代码

使用__name__变量来添加测试代码在主程序中,变量__name__的值是__main__,而在导入的模块中,这个变量是该模块的名称。#test.pydef test(): todo()if __name__ == '__main__' : test()测试代码放在函数test中,可在程序中导入模块并对其进行测试。>>>import test>>>test.test()...

2021-03-02 09:48:53 351

原创 python-文件的存储位置

个人编写的模块需要放在正确的位置,python才能够找到。1、sys.path>>> import sys>>> sys.path.append("/home/py/Documents")2、将模块放到正确的位置python默认的目录列表(即搜索路径)>>> import sys>>> print(sys.path)['', '/home/py/work/python', '/usr/local/pytho

2021-03-02 09:40:56 3963

原创 Linux通过sftp协议上传、下载文件

一、通过Secure CRT来访问服务器,并对上传或下载文件。通过File--Connect SFTP Session可以打开ftp。二、命令行输入sftp user@192.168.*.* 可直接进入sftp三、上传文件命令用put、下载文件命令用get...

2021-01-15 15:06:15 1049

原创 将十六进制的字符串文本转换为char[]的十六进制数组

从内存读取的十六进制数据,形如68 04 0b 00 00 00以string的形式保存,现在需要按每8位一个字节 保存在数组中,转换方法是将每两个数字截取,然后转十六进制。以字节为单位保存在cahr[]数组中。void decodeUnit(string str){ if(!str.empty()) { int size=str.size()/2; int i=0; string szchar; uns..

2020-12-23 14:23:35 3399

原创 QT 信号与槽

信号(Signal)是在特定情况下被发射的事件。GUI程序的主要内容就是对界面上各组件的信号的响应,只需要知道什么情况下发射哪些信号,合理地去响应和处理这些信号就可以了。槽(Slot)是对信号响应的函数。槽就是一个函数,与一般的C++函数是一样的,可以定义在类的任何部分,可以具有任何参数,也可以被直接调用。槽函数与一般的函数不同的是:槽函数可以与一个信号关联,当信号被发射时,关联的槽函数被自动执行。信号与槽关联是用QObject::connect()函数实现的,基本格式:QObject::co

2020-11-30 11:01:36 112

原创 QT5.9编译的程序无法在xp上运行

QT5.7之后的版本已经不再支持xp系统了,即5.7之后编译的程序无法在xp上运行。QT5.6可以将程序部署在xp系统上,图是5.6支持的平台情况。

2020-11-27 17:43:19 1107

原创 QT 改变窗体大小时,ListWidget中的item高度异常

用ListWidget和Painter绘制的聊天对话框,使用了resizeEvent(),当窗口大小改变时,会重新绘制对话框。遇到的问题是改变窗口大小时,ListWidgetItem的高度会发生变化,会高出来一些。解决方法是统一了绘制的字体格式的大小。问题解决。AnalyUI::AnalyUI(QWidget *parent) : QWidget(parent){ QFont tfont=this->font(); tfont.setFamily("Microsoft

2020-11-26 20:00:26 1009

原创 QT ListWidget中添加的item定位到最新添加的一行

ListWidget插入的item总是显示在第一行,要看最新的item就要拖动滑动条。这里需要添加一个函数即可,将item移动到最底端。ui->listWidget->scrollToBottom();void MainWindow::dealMessage(AnalyUI *message, QListWidgetItem *item){ message->setFixedWidth(this->width()); QSize size(50,80);

2020-11-24 14:37:48 2342

原创 QT Listwidget对话框自适应窗口

基于ListWidget和Painter绘制的聊天框气泡形式,右侧的对话框无法自适应窗口拉伸变化。在这个class MainWindow : public QMainWindow继承了QMainWindow的子类MainWindow 中添加函数resizeEvent 重新绘制框图void MainWindow::resizeEvent(QResizeEvent *event){ Q_UNUSED(event); for(int i=0;i<ui->li..

2020-11-24 11:20:53 1383

原创 QT 创建右键菜单 不能正常弹出

在ListWidget上添加了customContextMenuRequested的右键菜单功能,但是点击右键不能正常显示菜单。解决:需要在Listwidget上设置菜单策略,在构造函数中添加语句,然后就可以点击右键显示菜单了。ui->listWidget->setContextMenuPolicy(Qt::CustomContextMenu);...

2020-11-13 17:11:18 1414 1

原创 QT 创建下拉菜单

给ToolButton创建一个下拉菜单,实现如图所示的效果。 //下拉菜单 QMenu *menuSelection = new QMenu(this); menuSelection->addAction(ui->actSelAll); menuSelection->addAction(ui->actSelNone); menuSelection->addAction(ui->actSelInvs); //.

2020-11-13 14:56:06 2290

原创 QT ToolButton关联Action

QToolButton有一个setDefaultAction函数,使其与一个Action关联,按钮的文字、图标、ToolTip都将自动设置为与关联的Action一致,单击一个ToolButton就是执行Action的槽函数。设置Action结果图关联代码,调用toolButton的setDefaultAction函数,参数为Actionvoid MainWindow::setActionForButton(){//为toolbutton 关联action ui->t

2020-11-13 11:45:21 2353 1

原创 QT工具栏图标显示文本内容

在构造函数内添加ui->mainToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);函数有多个参数,可根据不同需求选择。

2020-11-13 09:44:38 985

原创 QT工具栏不显示图标

Question:创建的Action拖到工具栏处,运行时不显示图标。在添加资源文件时,存储的图标和图片文件,要将图标等原始文件放在项目的子目录下,不要嵌套多个文件夹。

2020-11-13 09:38:02 2608

原创 使用宏求结构体的内存偏移地址

#define Offset(type,field) ((size_t)&((type *)0->field))对0取指针的操作((type *)0)的结果就是一个类型为type *的NULL指针。如果利用这个NULL指针访问type成员,当然是非法的,但是因为&((type *)0->field)的意图只不过是计算field字段的地址,因此是合法的。编译器根本就不生成访问type的代码,而仅仅是根据type的内容布局和结构体实例首址在编译期计算这个(常...

2020-10-18 15:47:40 367

原创 哈希函数-SHA1和SHA256算法

SHA2算法是对SHA1算法的继承。区别在于两者的构造和签名长度不同。SHA1SHA-1通过4轮运算(每轮20步,共80步)将长度不超过264的输入压缩成为160bit的消息摘要。初始化MD缓冲区,需要160位来存放哈希函数的初始变量、中间摘要和最终摘要。需要5个32位的寄存器。SHA-1的框图SHA256SHA256最大输入长度为2^64比特,输入按照512比特分组,最终输出256比特长度的消息摘要。消息填充初始化需要8个32位...

2020-09-25 14:23:13 4283

原创 什么是哈希函数

Hash函数译为哈希函数,又称散列函数。是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出的值称为散列值或消息摘要。简单来说就是一种将任意长度的输入消息压缩成某一固定长度的消息摘要的函数。它具备以下的性质(哈希函数所必须的性质):H可应用于任意大小的数据块。 H产生定长的输出。 对任意给定的x,计算H(x)比较容易,用硬件和软件均可以实现。出于安全性考虑,对哈希函数的三个安全性假设:对任意给定的散列值h,找到满足H(x)=h的x在计算上是不可行的,称之为单向性...

2020-09-25 11:45:24 10984 1

原创 哈希函数-MD5算法

MD5 通过4轮运算(每轮16步,共64步),将任意长的消息压缩成为一个128bit的消息摘要,使用了4个32bit的寄存器。MD结构MD结构是基于迭代式结构来构造碰撞稳固的Hash函数的方法,即通过某一碰撞稳固的压缩函数(从较大的固定长度的输入集合映射到相对小的有固定长度的输出集合的函数)????:0,1????????0,1????0,1????来构造出碰撞稳固的Hash函数????:0,1∗0,1????。基于MD结构的有固定初始值的Hash函数一般形式????????∈0,1

2020-09-25 11:38:40 5494

原创 哈希算法——哈希函数构造

构造哈希函数的目标是使得到的关键字的哈希地址尽可能均匀地分布在n个连续内存单元地址上,从而减少地址冲突。根据关键字的结构和分布的不同,可构造出许多不同的哈希函数。常用的构造哈希函数方法有1、除留余数法除留余数法是用关键字k除以某个不大于哈希长度m的数p (p<=m),将所得的余数作为哈希地址的方法。h(k) = k mod p这种方法的关键是选好p,使得元素集合中的每一个关键字通过该函数转换后映射到哈希表范围内的任意地址上的概率相等,从而减少发生冲突的可能性。2...

2020-09-23 16:54:21 1622

原创 哈希算法——哈希表

哈希表:根据设定的哈希函数H(key)和处理冲突的方法将一组关键字映射到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“像”(H(key))作为记录在表中的存储位置,这种表便称为哈希表。所得存储位置称为哈希地址或散列地址。在记录的关键字和其存储位置之间建立一个确定的函数关系f,即将关键字为key的记录存储在f(key)的存储位置上,则对于给定值kval,若存在关键字等于kval的记录,则必在f(kval)的存储位置上。通常是设置一个一维数组来存放各个记录,f(key)便为数组下标。...

2020-09-23 16:12:21 709

转载 c++的关键字即保留字小结

1.asm(汇编),用法如下:asm (指令字符串);允许在C++程序中嵌入汇编代码。2. auto(自动,automatic)是存储类型标识符,表明变量“自动”具有本地范围,块范围的变量声明(如for循环体内的变量声明)默认为auto存储类型。3. bool(布尔)类型,C++中的基本数据结构,其值可选为true(真)或者false(假)。C++中的bool类型可以和int混用,具体来说就是0代表false,非0代表true。bool类型常用于条件判断和函数返回值。4. ...

2020-09-23 12:10:16 129

原创 变量的存储方式和生存期

动态存储方式和静态存储方式变量的两种存储方式变量的存储有两种方式:静态存储方式和静态存储方式。静态存储方式是指程序运行期间由系统分配固定的存储空间的方式,动态存储方式是程序运行期间根据需要进行动态的分配存储空间的方式。 用户区 程序区 静态存储区 动态存储区 全局变量全部存放在静态存储区中,在程序开始执行时给全局变量分配存储区,程序执行完毕后释放,占据固定的存储单元。在函数调用开始时,分配动态存储空...

2020-09-23 11:42:52 397

原创 链接boost库出现boost::system::generic_category()错误

执行编译命令:g++ -lboost_system-mt -I/home/base/boost_1_58_0 -L/home/base/boost_1_58_0/stage/lib client.cpp -o client出现错误提示:/tmp/ccpebBMj.o: In function `__static_initialization_and_destruc...

2019-03-04 13:59:31 2731

原创 半同步半异步线程池模式 (一)

  Solution半同步半异步模式分成三层:同步层、异步层、同步队列高层任务,比如数据库查询、文件传输,为了简化并行编程,同步任务在独立的线程或进程中运行。底层任务,比如网络接口、服务中断,异步是为了实现高质量服务。同步队列,是为了在同步和异步层进行任务同步。 Structure半同步半异步模式中包含以下各部分:同步任务层执行高层处理任务。同步层的任务...

2019-01-31 15:59:08 364

原创 对象池模式 C++实现

 对象池模式(The Object Pool Pattern)对象池是一种对象复用技术。Mark Grand在《Patterns in Java》描述了对象池的设计模式,它通过管理和复用有限对象来共享某些稀少或必须付出昂贵代价的资源,该模式的UML结构分为3部分。 Reusable:被复用的对象或资源。Client:复用对象的使用者,1个Client对象可以使用多个复用对象...

2019-01-28 18:15:10 594 1

原创 Linux和Windows跨平台编码时统一编码格式方法

1、统一使用utf-8编码格式扩展阅读1

2018-05-21 14:00:43 7447

转载 Linux头文件和库文件添加环境变量与GCC编译器添加INCLUDE与LIB环境变量

对所有用户有效在/etc/profile增加以下内容。只对当前用户有效在Home目录下的.bashrc或.bash_profile里增加下面的内容:(注意:等号前面不要加空格,否则可能出现 command not found)#在PATH中找到可执行文件程序的路径。export PATH =$PATH:$HOME/bin#gcc找到头文件的路径C_INCLUDE_PATH=/usr/include...

2018-05-21 09:47:52 13477

原创 source insight 添加系统库函数头文件

1、在BASE项目下添加Project-&gt;Open Project ,打开Base项目2、打开PreferencesProject-&gt;Preferences,选择Symbol Lookups选项卡3、打开Import Symbols for All Projects4、打开右侧Add按钮,弹出Add External Symbols对话框5、打开Import from an INCLU...

2018-05-14 15:40:29 12450 3

原创 句柄handle的概念

书上对句柄的定义:Microsoft Windows 3 Developer’s Workshop,句柄的概念是这样的:在Windows环境中,句柄是用来标识项目的,这些项目包括:模块(module)、任务(task)、实例(instance)、文件(file)、内存块(block of memory)、菜单(menu)、控制(control)、字体(font)、资源(resource),包括图标...

2018-05-14 09:59:37 1220

原创 centos6.5 源码安装gcc-4.8.5

1、下载gcc-4.8.5.tar.bz22、tar-xvf gcc-4.8.5.tar.bz2 解压到为gcc-4.8.53、cd gcc-4.8.5 进入文件目录4、./contrib/download_prerequisites 在gcc-4.8.5目录下执行该命令,该命令会在gcc-4.8.5目录下新建三个文件,这是安装依赖的三大件,该脚本会自动下载、解压。    该步操作需要注意,是在g...

2018-05-13 08:42:25 2300

空空如也

空空如也

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

TA关注的人

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