网络 3-4 心跳包和tcp
心跳包和tcp心跳包这节用的还是上节课的代码,算是对上一节的补充扩展
keep-alive-保活
在ChatClient中添加类向导
123456void CChatClientDlg::OnTimer(UINT_PTR nIDEvent){ CPackage pkg(PT_HEARTBEAT, m_client); sendto(m_sockClient, (char*)&pkg, sizeof(pkg), 0, (sockaddr*)&m_siServer, sizeof(m_siServer)); CDialogEx::OnTimer(nIDEvent);}
添加类
12345678910111213//CLock.h#pragma once#include<Windows.h>class CLock{public: CLock(); ~CLock(); void Lock(); void Unlock();private: CRITICAL_SECTION m_cs;};
123456789101112 ...
网络 2 聊天室
聊天室上线新建控制台程序
新建头文件
Proto.h
123456789101112131415161718192021222324252627282930#pragma once#define WIN32_LEAN_AND_MEAN#include <windows.h>#include <WinSock2.h>#pragma comment(lib,"ws2_32.lib")//包类型enum PackageType{ PT_ONLINE, PT_OFFLINNE, PT_PUBLIC,//群聊,公聊 PT_PRIVATE//私聊};#define NAMELEN 64struct CLientInfo{ sockaddr_in m_si; char m_szName[NAMELEN];};#define MASLEN 1300struct CPackage{ PackageType m_pt;//包的类型 CLientInfo m_ci;//客户端的信息 char m_szMsg[M ...
网络 1 udp
基础概念协议:约定好的数据格式,约定好的数据的解析方式
在cmd中输入ipcongfig可以查看IP配置
ip地址:当我们使用计算机或者其他网络设备进行互联网通信时,每一个设备都需要一个唯一的标识符来进行通信。这个标识符被称为 IP 地址。IP(Internet Protocol)地址是一个由32位二进制表示的数字,通常被分为四个数字组成的点分十进制的形式表示,例如:192.168.1.1。
端口
protocol port(协议端口)
操作系统中通信的端点,与IP地址及通信协议关联,用来获取相应的网络服务。
(eg.IP地址就像银行的地址,而端口就是银行处理不同业务的窗口)
在网络技术中,端口(Port)大致有两种意思:
一是物理意义上的端口,比如,ADSL Modem、集线器、交换机、路由器用于连接其他网络设备的接口,如RJ-45端口、SC端口等等。
二是逻辑意义上的端口,一般是指TCP/IP协议中的端口
公网
公网是相对于内网而言的。内网上网的计算机得到的IP地址是Internet上的保留地址;而公网上网的计算机得到的IP地址是因特网的公用地址,是非保留的地址。公网的 ...
windows 14 钩子和服务
钩子和服务钩子-windows hook
SetWindowsHookEx
参数说明:
参数 idHook:指示欲被安装的挂钩处理过程之类型,类型如下。WH_MSGFILTER(-1):安装一个挂钩处理过程,以监视由对话框、消息框、菜单条、或滚动条中的输入事件引发的消息.详情参见MessageProc挂钩处理过程.
WH_JOURNALRECORD(0):安装一个挂钩处理过程,对寄送至系统消息队列的输入消息进行纪录.详情参见JournalRecordProc挂钩处理过程.
WH_JOURNALPLAYBACK(1):安装一个挂钩处理过程,对此前由WH_JOURNALRECORD 挂钩处理过程纪录的消息进行寄送.详情参见 JournalPlaybackProc挂钩处理过程.
WH_KEYBOARD(2):安装一个挂钩处理过程对击键消息进行监视. 详情参见KeyboardProc挂钩处理过程.
WH_GETMESSAGE(3):安装一个挂钩处理过程对寄送至消息队列的消息进行监视,详情参见 GetMsgProc 挂钩处理过程.
WH_CALLWNDPROC(4): 安装一个挂钩处理过程,在 ...
windows 13 复习
这节课主要是复习之前的内容,查缺补漏
TLS线程局部存储(Thread Local Storage,TLS),是一种变量的存储方法,这个变量在它所在的线程内是全局可访问的,但是不能被其他线程访问到,这样就保持了数据的线程独立性。而熟知的全局变量,是所有线程都可以访问的,这样就不可避免需要锁来控制,增加了控制成本和代码复杂度。
新建控制台应用
12345678910111213141516171819202122232425262728293031// test.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <windows.h>#include <iostream>using namespace std;DWORD WINAPI ThreadFunc(LPVOID lpParam){ DWORD dw = (DWORD)TlsGetValue(0); TlsSetValue(0, (LPVOID)0x44557788); return 0;}int mai ...
windows 12 C线程和mfc线程
C线程和mfc线程C多线程tls-thread local storage
1234TlsAllocTlsFreeTlsSetValueTlsGetValue
TlsAlloc
12345函数原型:DWORD TlsAlloc();作用:为调用该函数的线程分配一个线程局部存储序号,供其它三个函数使用注意:一个进程最多分配TLS_MINIMUM_AVAILABLE个索引,目前定义为64,一个进程中所有线程分配的索引不会重复使用:int index=TlsAlloc()
DWORD TlsAlloc(void); // 返回一个TLS索引
每个线程创建时系统给它分配一个LPVOID指针的数组(叫做TLS数组,长度为TLS_MINIMUM_AVAILABLE),TlsAlloc()函数的作用是返回访问当前线程的TLS数组的一个下标(索引),不同线程得到不同的索引变量值。
当调用TlsAlloc的时候,系统会挨个检查这个数组中成员的值,直到找到一个值为FREE的成员。把找到的成员的值由FREE改为INUSE后,TlsAlloc函数返回该成员的索引。如果不能找到一个值 ...
windows 11 远程线程注入
远程线程注入信号12CreateSemaphoreReleaseSemaphore
CreateSemaphore
创建或打开命名或未命名的信号量对象。
要指定对象的访问掩码,请使用CreateSemaphoreEx函数。
参数lpSemaphoreAttributes指向SECURITY_ATTRIBUTES结构的指针。如果此参数为NULL,则子进程无法继承句柄。
结构的lpSecurityDescriptor成员为新信号量指定安全描述符。如果此参数为NULL,则信号量将获取默认安全描述符。信号量的默认安全描述符中的ACL来自创建者的主要或模拟令牌。
*lInitialCount信号量对象的初始计数。该值必须大于或等于零且小于或等于lMaximumCount。信号量的状态在其计数大于零时发出信号,在信号为零时发出信号。只要wait函数释放等待信号量的线程,计数就会减1。通过调用ReleaseSemaphore函数将计数增加指定的量。
*lMaximumCount信号量对象的最大计数。该值必须大于零。
*lpName信号量对象的名称。名称仅限于MAX_PATH个字符。名称比较区分大 ...
windows 9-10 同步
同步多线程共享资源同步原因 新建控制台项目
Counter1.cpp
123456789101112131415161718192021222324252627282930313233343536373839404142// Counter1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <windows.h>#include <iostream>using namespace std;int g_nCounter = 0;DWORD WINAPI ThreadFunc(LPVOID lpParam){ for (int i = 0; i < 0x10000; ++i) { ++g_nCounter; } printf("tid:%08X counter:%08X \r\n", GetCurrentThreadId(), g_nCounter); return 0;}int main( ...
windows 8 线程的创建和退出
线程的创建和退出概念区分
程序-磁盘上的可执行文件
进程-程序执行代码所需资源的集合,不活泼的,懒惰的
线程-程序执行代码的最小单位,活泼的,勤奋的
线程的运行(调度)原理cpu时间切片
线程的创建UI线程(主线程)-一般不做繁重的任务
非UI线程(工作线程)-一般做较繁重的任务
新建Windows桌面应用程序
设计Dialog
示例编辑框的ID为EDT_COUNTER
四个按钮的ID分别为BTN_START、BTN_PAUSE、BTN_STOP、BTN_CONTINUE
Sleep函数可以在暂停的时候减少线程对CPU的占用
暂停线程SuspendThread
恢复线程ResumeThread
一个线程无法自己恢复自己,但是可以自己把自己挂起
Counter.cpp
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737 ...
windows 7 文件加密
文件加密新建MFC应用程序
选择MFC EditBrowse Control
修改ID
添加新建项目
Encrypt.cpp
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417 ...