业务安全之设备指纹:相关资料学习 以攻击者角度学习某风控设备指纹产品.设备指纹生成算法大变革.网易易盾的相关资料基于设备指纹零感验证系统.某移动端防作弊产品技术原理浅析与个人方案构想.一种移动端设备指纹方案介绍....
vs连接数据库mysql_real_connect()失败,mysql_error()报错Authentication plugin ‘caching_sha2_password‘ cannot be 实验环境:vs2015Windows10 64位c++问题调用#include "mysql.h"连接数据库。注:连接的是本地的数据库localhost报错信息:Authentication plugin ‘caching_sha2_password’ cannot be loaded定位报错:mysql_real_connect()失败。调用mysql_error()可以知道出错原因:Authentication plugin ‘caching_sha2_password’ can
Windows网络编程 基于tcp实现一个简单的CS模型[完整可运行项目] 客户端/服务端模式:在TCP/IP网络应用中,通信的两个进程相互作用的主要模式是客户/服务器模式,即客户端向服务器发出请求,服务器接收请求后,提供相应的服务。客户/服务器模式的建立基于以下两点:(1)建立网络的起因是网络中软硬件资源、运算能力和信息不均等,需要共享,从而就让拥有众多资源的主机提供服务,资源较少的客户请求服务这一非对等作用。(2)网间进程通信完全是异步的,相互通信的进程间既不存在父子关系,又不共享内存缓冲区。因此需要一种机制为希望通信的进程间建立联系,为二者的数据交换提供同步,这就是基
Windows网络编程 接受连接请求和收发数据 本文记录accept()/listen()和recv()/send()环节接受连接请求和收发数据连接请求accept()函数原型connect()函数原型收发数据send()函数原型recv()函数原型参数详细过程分析示例代码参考资料:连接请求accept()该函数在 s 上取出未处理连接中的第一个连接,然后为这个连接创建新的套接字,返回它的句柄。新创建的套接字是处理实际连接的套接字,它与 s 有相同的属性。程序默认工作在阻塞模式下,这种方式下如果没有未处理的连接存在,accept 函数会一直
Windows网络编程 套接字的绑定bind()和监听设置listen() 套接字的绑定bind和监听设置listen套接字的绑定简介函数原型如何绑定设置监听套接字进入监听状态函数原型代码示例本文记录bind()和listen()环节套接字的绑定简介bind 函数用在没有建立连接的套接字上,它的作用是绑定面向连接的或者无连接的套接字。套接字被 socket 函数创建以后,存在于指定的地址家族里,但它是未命名的。bind 函数通过安排一个本地名称到未命名的 socket 而建立此 socket 的本地关联。本地名称包含 3 部分:主机地址、协议号(分别为 UDP 或 T
Windows网络编程 socket的创建和关闭 Socket的创建和关闭Windows网络通信简易步骤说明简易介绍函数原型:**参数:**函数返回值关闭套接字Windows网络通信简易步骤说明(1)服务端1、加载套接字库,创建套接字(WSAStartup()/socket());2、绑定套接字到一个IP地址和一个端口上(bind());3、将套接字设置为监听模式等待连接请求(listen());4、请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept());5、用返回的套接字和客户端进行通信(send()/recv()
Windows网络编程 WSAstartup()详解 WSAstartup详解详细说明函数原型使用方法:参数说明:返回值:使用范例:参考资料:socket编程要调用各种socket函数,但是需要库Ws2_32.lib和头文件Winsock2.h,这里的WSAStartup就是为了向操作系统说明,我们要用哪个库文件,让该库文件与当前的应用程序绑定,从而就可以调用该版本的socket的各种函数了。#include<WinSock2.h> //第2版本的网络库#pragma comment(lib,"ws2_32.lib") //windows 3
STL笔记09 类模板遇上static关键字 我们知道在类中使用staitc关键字的时候,static不属于实例,而属于类本身。但是在模板类中,作为类本身一开始无法初始化,所以static成员应该就不会属于类本身;那么static关键字到底属于哪?我们通过写一个小的示例程序来观察一下:#include<iostream>using namespace std;template<class T>class Person {public: static int a;};//类外初始化template&
实模式和保护模式之“初相见” 作为一个计科专业的学生,之前一直对计算机系统、系统结构、计算机组成原理等课程不上心,认为编程我也没用到啊,但是随着学习的深入,越发觉得这些知识的重要性和魅力,只恨当初没有好好学习,如今只能再从头!“初相见”,仅作简单了解。实模式与保护模式的来历我们先来说一下为什么有实模式和保护模式的区别。最早期的8086 CPU只有一种工作方式,那就是实模式,而且数据总线为16位,地址总线为20位,实模式下所有寄存器都是16位。而从80286开始就有了保护模式,从80386开始CPU数据总线和地址总线均为32位,而且
PC加电后,CPU如何执行第一条指令 问题:CPU是如何执行第一条指令的?小问题:8086年代,为什么第一条指令的位置在F000H:FFF0H?小问题:为什么第一条指令放在ROM中?带着这些问题,我开始对cpu执行第一条指令开始研究。加电后的启动流程CPU首先会进行硬件初始化(hardware reset)。然后是可选的自检过程(BIST built-in self-test)。CPU开始执行第一条指令。从此开始CPU进入软件初始化过程。 在处理器的众多的引脚中,有一个RESET,由于接受复位信号,没当处理器加电,处理器都会执
为什么GetProcAddress返回值总为0?[解决方案] 相信很多人在显式调用dll中函数的时候,会遇到相同的问题:就是我们loadlibrary成功后,明明调用的函数也是正确的,但是GetProcAddress的地址总是为0!不能获得正确的函数地址。出错示例我们先来看我这次出错的示例:DLL部分__declspec(dllexport) BOOL xxxxxxx();xxxxxx(){ xxxxxxx;}exe调用dll部分 HMODULE hInst; hInst = LoadLibrary(L"Dll1.dll"); if (NU
STL笔记08类模板的h和cpp文件如何编写及会遇到的问题! 正常来说,我们编写一个类,一般将h文件和cpp文件进行分离,h文件定义类和函数,cpp文件中进行函数的实现; 然后提供给其他cpp文件调用。那么如果也这样编写类模板会出现什么问题呢?我们来看源码实现.h文件:定义了一个模板类#pragma oncetemplate<class T>class Person{public: Person(T age); ~Person(); void Show();private: T m_age;};.cpp文件:生命.
STL笔记07模板类如何写友元函数,不要滥用! 上来先贴结论:类模板类外实现不要滥用友元友元函数先来复习一下友元函数。友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend。问题:根据友元函数的特性,他是非成员函数;在模板类中使用友元函数常常会遇到这么一个报错!无法解析的外部符号错误代码示例:#include<iostream> using namespace std; template<cl.
#pragma once保证头文件只被编译一次 用VS编程的时候,经常会在头文件中加一个#pragma once,但是之前不太明白他的作用,本篇文章用做学习记录。#pragma once#pragma once是一个比较常用的C/C++杂注,只要在头文件的最开始加入这条杂注,就能够保证头文件只被编译一次。注意:#pragma once是编译器相关的,有的编译器支持,有的编译器不支持,具体情况请查看编译器API文档,不过现在大部分编译器都有这个杂注了。具体写法:#pragma once... ... // 一些声明语句第二种保证头文件只能
STL初学者入门笔记06类模板派生普通类和模板类 模板类派生普通类模板类派生普通类时,必须要声明类型!模板类派生时,需要具体化模板类,因为C++编译器需要知道,父类的数据类型具体时什么样子的,才可以分配内存。即 要知道父类所占内存大小是多少,只有数据类型固定下来,才知道如何分配内存。示例:template<class T>class Person {public: Person() { m_age = 0; }private: T m_age;};class sonPerson : public Perso
STL初学者入门笔记05函数模板实例对char和int数组进行排序 首先顶一个打印函数模板template<class T>void PrintArray(T *arr, int len){ for (int i = 0; i < len; i++) { cout << arr[i] << " "; } cout << endl;}定义排序函数模板template<class T>void MySort(T *arr, int len){ for (int i = 0; i &