![](https://img-blog.csdnimg.cn/20190927151053287.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++服务器
文章平均质量分 61
C++服务器
NGC_2070
纸上得来终觉浅,绝知此事要躬行!
展开
-
CentOS8 设置NAT网络
CentOS8 设置NAT网络原创 2022-06-12 12:56:33 · 417 阅读 · 0 评论 -
安装ubuntu-20.04.1-live-server-amd64虚拟机 [转]
点击vmnet8右键-》属性进行修改然后右键禁用vmnet8,然后再右键启用 Vmware客户端的配置,编辑->虚拟网络编辑器使用VMWare安装ubuntu-20.04.1-live-server-amd64虚拟机:https://www.cnblogs.com/candywall/p/14639092.htmlhttps://www.pianshen.com/article/66111744879/Ubuntu20.04开启root账户:https://blog....转载 2021-06-16 14:35:43 · 1820 阅读 · 0 评论 -
VMware虚拟机三种网络模式详解与配置 [转]
VMware虚拟机三种网络模式详解与配置 [转]原文链接:https://note.youdao.com/ynoteshare1/index.html?id=236896997b6ffbaa8e0d92eacd13abbf&type=note 参考:https://blog.csdn.net/zhang33565417/article/details/97779579目录简介Bridged(桥接模式)NAT(地址转换模式)Host-Only(仅主机模式)简介vm转载 2021-05-13 16:24:27 · 194 阅读 · 0 评论 -
Wireshark抓取本地数据 [转]
Wireshark抓取本地数据 [转]原文链接:https://blog.csdn.net/lykio_881210/article/details/79555135 windows系统没有提供本地回环网络的接口,用wireshark监控网络的话只能看到经过网卡的流量,看不到访问localhost的流量,因为wireshark在windows系统上默认使用的是WinPcap来抓包的。 现在可以用Npcap来替换掉WinPcap,Npcap是基于WinPcap 4.1.3开发的,api兼容WinPc转载 2021-05-13 15:07:02 · 330 阅读 · 0 评论 -
Wireshark 基本概念笔记
直接抓包本机网卡进出:交换机环境 端口镜像:ARP欺骗:MAC泛洪wireshark原理时间格式设置:时间参考:列表中右键,点击事件参考进行设置开启名字解析手动设置名字解析(列表右键)标记数据包(列表右键)着色规则:(视图 -> 着色规则)注释数据包合并数据包 (文件...原创 2021-05-13 14:53:18 · 81 阅读 · 0 评论 -
Wireshark 使用总结 [转]
wiresharkwireshark能获取HTTP,也能获取HTTPS,但是不能解密HTTPS,所以wireshark看不懂HTTPS中的内容,总结,如果是处理HTTP,HTTPS 还是用Fiddler,其他协议比如TCP,UDP 就用wireshark. 参考:https://blog.csdn.net/zhang5220760138/article/details/78924979过滤器有两种: 一种是显示过滤器,就是主界面上那个,用来在捕获的记录中找到所需要的记录(在已经捕获的..转载 2021-05-13 14:47:53 · 554 阅读 · 0 评论 -
Windows10 安装 telnet
Windows10 安装 telnet点击应用点击 程序和功能启用或关闭Windows功能勾选Telnet客户端点击确定后安装完成原创 2021-05-11 17:38:39 · 232 阅读 · 0 评论 -
Jsoncpp 使用说明 [转]
Jsoncpp 使用说明参考:《Jsoncpp 使用说明》 https://blog.csdn.net/shuiyixin/article/details/89330529?utm_source=app&app_version=4.6.1 JsonCpp是一个开源库 下载地址:https://github.com/open-source-parsers/jsoncpp 文档地址:http://open-source-parsers.github.io/jsoncp...转载 2021-05-08 19:38:27 · 126 阅读 · 0 评论 -
Linux 多线程常用知识点总结
Linux 多线程常用函数笔记参考:https://dongshao.blog.csdn.net/category_8812364_2.html线程函数使用【TID的类型: pthread_t】pthread_t是一个结构体数据类型,所以可移植操作系统实现不能把它作为整数处理 Linux 3.2.0使用无符号长整型表示pthread_t数据类型【线程TID的比较:pthread_equal】#include <pthread.h>int pthread_eq转载 2021-03-15 22:58:21 · 287 阅读 · 0 评论 -
(C++服务器学习笔记):windows下使用select模型
目录服务端升级为select模型Socket的select模型客户端转为Select模型服务端升级为select模型Socket的select模型select( _In_ int nfds, _Inout_opt_ fd_set FAR * readfds, _Inout_opt_ fd_set FAR * writefds, _Inout_opt_ fd_set FAR * exceptfds, .原创 2021-01-09 19:34:30 · 1340 阅读 · 0 评论 -
(C++服务器学习笔记):报文多次收发转为一次收发
报文多次收发转为一次收发包头和数据合在一起,一次发送一次接收。 数据定义,服务端和客户端共用enum CMD //命令枚举{ CMD_LOGIN, CMD_LOGIN_RESULT, CMD_LOGOUT, CMD_LOGOUT_RESULT, CMD_ERROR};//DataHeaderstruct DataHeader //数据包头{ short dataLength; short cmd原创 2020-12-27 21:48:13 · 329 阅读 · 0 评论 -
(C++服务器学习笔记):网络数据报文的格式定义
网络数据报文的格式定义报文有两个部分,包头和包体,是网络消息的基本单元。 包头:描述本次消息包的大小,描述数据的的作用。 包体:数据 下面数据定义,服务端与客户端共用。enum CMD //命令枚举{ CMD_LOGIN, CMD_LOGOUT, CMD_ERROR};//DataHeaderstruct DataHeader //数据包头{ short dataLength; short cmd;};原创 2020-12-27 19:46:08 · 574 阅读 · 0 评论 -
(C++服务器学习笔记):发送结构化的网络消息数据
目录发送结构化的网络消息数据演示案例发送结构化的网络消息数据【纯字符串网络消息】优点: 处理简易命令方便快捷。 缺点: 传递大量数据是字符串解析消耗大。 企业中的应用方式: JSON、XML、自定义格式的字符数据形式。 【使用结构化的二进制数据流传输网络消息】优点: 简单、方便、解析快,消耗低。 缺点: 需要严格的网络字节序一致。 关于 recv 函数接收网络消息struct DataHeader{ shor.原创 2020-12-27 17:30:06 · 222 阅读 · 0 评论 -
(C++服务器学习笔记):持续处理请求的CS网络程序案例实践
目录程序逻辑图服务端程序客户端程序执行结果程序逻辑图服务端程序#define WIN32_LEAN_AND_MEAN#define _WINSOCK_DEPRECATED_NO_WARNINGS#include <windows.h>#include <WinSock2.h>#include <cstdio>#pragma comment(lib,"ws2_32.lib")int main(){ WOR原创 2020-12-27 16:15:27 · 163 阅读 · 0 评论 -
(C++服务器学习笔记):Windows环境TCP服务端、客户端案例
用Socket API建立简易TCP服务端、客户端用Socket API建立简易TCP服务端 建立一个socket 绑定接受客户端连接的端口 bind 监听网络端口 listen 等待接受客户端连接 accept 向客户端发送一条数据send 关闭socket closesocket 用Socket API建立简易TCP客户端 建立一个socket 连接服务器 connect 接收服务器信息 recv 关闭socket closesoc...原创 2020-12-27 14:52:53 · 1299 阅读 · 0 评论 -
UDP基本应用及广播案例
目录UDP客户端服务端模型数据传输发送数据接受数据服务端程序代码客户端程序代码广播广播之接受者广播之发送者UDP客户端服务端模型数据传输发送数据#include <sys/socket.h>ssize_t send(int sockfd, const void *buf, size_t nbytes, int flag);返回: 成功返回发送字节数,出错返回-1。ssize_t sendmsg(int sockf.原创 2020-12-26 00:06:52 · 277 阅读 · 0 评论 -
(C++通讯架构学习笔记):epoll介绍及原理详解
目录epoll技术简介epoll原理与函数介绍epoll技术简介【epoll概述】I/O多路复用:epoll就是一种典型的I/O多路复用技术: epoll技术的最大特点是支持高并发。 传统多路复用技术select,poll,在并发量达到1000-2000,性能就会明显下降 epoll,从linux内核2.6引入的,2.6之前是没有的 epoll和kquene(freebsd)技术类似:单独一台计算机支撑少则数万,多则数十上百万并发连接的核心技术。 epoll技术完全原创 2020-11-25 19:13:34 · 7292 阅读 · 0 评论 -
(C++通讯架构学习笔记):listen()队列剖析、阻塞非阻塞、同步异步
目录listen()队列剖析accept()函数阻塞与非阻塞I/O同步与异步I/Olisten()队列剖析listen():监听端口,用在 TCP连接 中的 服务器端 角色。 listen()函数调用格式:int listen(int sockfd, int backlog);要理解好backlog这个参数,需要先谈一谈 “监听套接字 队列”的话题【监听套接字的队列】对于一个调用listen()进行监听的套接字,操作系统会给这个套接字 维护两个队列..原创 2020-11-25 15:00:36 · 1113 阅读 · 0 评论 -
(C++通讯架构学习笔记):TCP状态转换,TIME_WAIT,SO_REUSEADDR
TCP状态转换同一个IP(INADDR_ANY),同一个端口SERV_PORT,只能被成功的bind()一次,若再次bind()就会失败,并且显示:Address already in use 就好像一个班级里不能有两个人叫张三结论:相同IP地址的相同端口,只能被bind一次;第二次bind会失败【命令netstat:显示网络相关信息】-a:显示所有选项 -n:能显示成数字的内容全部显示成数字 -p:显示段落这对应程序名netstat -anp | grep -E 'Stat...原创 2020-11-24 23:32:54 · 242 阅读 · 0 评论 -
(C++通讯架构学习笔记):TCP三次握手、telnet,wireshark使用简介
TCP连接的三次握手tcp:可靠的,面向连接的协议 udp:不可靠的,无连接的协议 只有TCP有三次握手【UDP没有】【最大传输单元MTU】MTU(Maximum Transfer Unit):最大传输单元。 MTU:每个数据包包含的数据最多可以有多少个字节,1.5K左右。 你要发送100K,操作系统内部会把你这100K数据拆分成若干个数据包【分片】,每个数据包大概1.5K之内【大概拆解成68个包】,对端进行重组。 我们只需要知道有 拆包,组包。 这68个包各自传送的路径可能不同...原创 2020-11-24 19:47:45 · 366 阅读 · 0 评论 -
(C++通讯架构学习笔记):TCP和UDP的区别、简单的客户端服务器程序演示
目录TCP和UDP的区别客户端服务器程序综合演示和调用流程图TCP和UDP的区别TCP协议:可靠的面向连接的协议;数据包丢失的话操作系统底层会感知并且帮助你重新发送数据包。 UDP协议:不可靠的,无连接的协议。 优缺点: tcp:可靠协议,必然要耗费更多的系统资源确保数据传输的可靠。 得到好处就是只要不断线,传输给对方的数据,一定正确的,不丢失,不重复,按顺序到达对端。 udp:不可靠协议;发送速度特别快;但无法确保数据可靠性。 各自的用途: tcp:文件传原创 2020-11-24 17:27:30 · 555 阅读 · 0 评论 -
(C++通讯架构学习笔记):守护进程及信号处理实战
目录守护进程功能的实现信号处理函数的进一步完善守护进程功能的实现配置文件设置(1)拦截掉SIGHUP,那么终端窗口关闭,进程就不会跟着关闭。 (2)守护进程,一运行就在后台,不会占着终端。 创建守护进程ngx_daemon()。 调用ngx_daemon()的时机: worker()子进程创建之前。【ngx_daemon()函数】int ngx_daemon(){ switch (fork()) { case -1:原创 2020-11-24 16:46:15 · 182 阅读 · 0 评论 -
(C++通讯架构学习笔记):信号,子进程实战,文件IO详谈
目录信号功能实战nginx中创建worker子进程日志输出重要信息谈write()函数思考掉电导致write()的数据丢失破解法信号功能实战signal():注册信号处理程序的函数 实际开发中,不用signal(),而要用sigaction()【signal/ngx_signal.cxx】#include <string.h>#include <stdint.h>#include <stdio.h>#include <st原创 2020-11-24 14:33:51 · 160 阅读 · 0 评论 -
(C++通讯架构学习笔记):日志打印、优化main函数调用顺序
目录基础设施之日志打印设置时区日志等级划分捋顺main函数中代码执行顺序基础设施之日志打印日志的重要性:供日后运行维护人员去查看、定位和解决问题 ngx_printf.cxx:放和打印格式相关的函数 ngx_log.cxx:放和日志相关的函数【ngx_log_stderr() 】ngx_log_stderr() :三个特殊文件描述符,谈到了标准错误 STDERR_FILENO,代表屏幕 ngx_log_stderr():往屏幕上打印一条错误信息,功能类似于pri..原创 2020-11-24 00:51:27 · 339 阅读 · 0 评论 -
(C++通讯架构学习笔记):读配置文件、查泄漏、设置标题实战
基础设施之配置文件读取使用配置文件,使我们的服务器程序有了极大的灵活性(比如修改端口号),是我们作为服务器程序开发者,必须要首先搞定的问题。 配置文件:文本文件,里边除了注释行之外不要用中文,只在配置文件中使用字母,数字下划线。 以#号开头的行作为注释行(注释行可以有中文)。 我们这个框架(项目),第一个要解决的问题是读取配置文件中的配置项(读到内存中来)。 【配置文件读取功能实战代码】写代码要多顾及别人感受,让别人更容易读懂和理解,不要刻意去炫技。 该缩进的必须要缩进,该...原创 2020-11-23 19:06:15 · 410 阅读 · 0 评论 -
(C++通讯架构学习笔记):服务器程序目录规划、makefile编写
信号高级认识范例【示例 】#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <signal.h>#include <errno.h>//信号处理函数void sig_usr(int signo){ if(signo == SIGUSR1) { printf("收到了SIGUSR1信号,我休息10原创 2020-11-23 14:15:22 · 199 阅读 · 0 评论 -
(C++通讯架构学习笔记):守护进程详解、nginx守护进程代码模板
目录普通进程运行观察守护进程基本概念守护进程编写规则nginx守护进程代码模板守护进程不会收到的信号普通进程运行观察【引例】#include <stdio.h>#include <stdlib.h> //malloc#include <unistd.h>#include <signal.h>int main(int argc, char *const *argv){ printf("进程开始执行原创 2020-11-22 23:34:33 · 244 阅读 · 0 评论 -
(C++通讯架构学习笔记):fork函数详解、范例演示
目录fork()函数简单认识僵尸进程的产生、解决,SIGCHLDfork()函数进一步认识完善一下fork()代码fork()失败的可能性fork()函数简单认识创建进程 进程的概念:一个可执行程序,执行起来就是一个进程,再执行起来一次,它就又是一个进程(多个进程可以共享同一个可执行文件)。 文雅说法:进程 定义为程序执行的一个实例。 在一个进程(程序)中,可以用fork()创建一个子进程,当该子进程创建时,它从fork()指令的下一条(或者说从fork().原创 2020-11-22 21:01:51 · 2836 阅读 · 0 评论 -
(C++通讯架构学习笔记):信号编程进阶、sigprocmask范例
信号编程进阶、sigprocmask范例【信号集】一个进程,必须能够记住 这个进程 当前阻塞了哪些信号 我们需要 “信号集 ”的这么一种数据类型(结构),能够把这60多个信号都表示下(都装下)。 0000000000,0000000000,0000000000,00,0000000000,0000000000,0000000000,00 (64个二进制位) linux 是用sigset_t结构类型来表示信号集的typedef struct{ unsigned long sig[2.原创 2020-11-22 17:47:02 · 178 阅读 · 0 评论 -
(C++通讯架构学习笔记):Unix-Linux体系结构、信号编程初步
目录Unix/Linux操作系统体系结构signal函数范例可重入函数不可重入函数的错用演示Unix/Linux操作系统体系结构类Unix操作系统体系结构分为两个状态 用户态 内核态 操作系统/内核:用来控制计算机硬件资源,提供应用程序运行的环境。 我们写的程序,他要么运行在用户态,要么运行在内核态。 一般来讲运行在用户态。当程序要执行 一些特殊代码的时候,程序就可能切换到内核态,这种切换由操作系统控制,不需要人为介入。 换种角度理解:用户态 --.原创 2020-11-22 15:32:51 · 108 阅读 · 0 评论 -
(C++通讯架构学习笔记):信号的概念、认识、处理动作
目录信号的基本概念通过kill命令认识一些信号进程的状态常用的信号列举信号处理的相关动作信号的基本概念进程之间的常用通信手段:比如发送信号kill一个worker进程,master拉起一个新的worker进程 ,以及前面的 SIGHUP信号 信号 :通知(事情通知),用来通知某个进程发生了某一个事情。 事情,信号都是突发事件, 信号是异步发生的,信号也被称呼为“软中断”。【信号如何产生】某个进程发送给另外一个进程或者发送给自己(如热升级) 由内核(操作系统)发送原创 2020-11-22 11:47:08 · 255 阅读 · 0 评论 -
(C++通讯架构学习笔记):终端和进程的关系
终端和进程的关系【终端与bash进程】使用ps -ef | grep bash命令查看 bash 进程再开一个终端连接,再次查看发现有两个bash进程pts(虚拟终端),每连接一个虚拟终端到linux操作系统,就会出现 一个bash进程(shell[壳]),黑窗口,用于解释用户输入的命令,bash = shell = 命令行解释器【终端上的开启进程】ps -la可以查看终端上的进程(包括其他终端上开启的进程) 如果终端退出,这个终端上运行的进程nginx也退出了【进程关系原创 2020-11-21 17:22:15 · 151 阅读 · 0 评论 -
(C++通讯架构学习笔记):nginx源码查看方式简介
nginx源码查看方式简介【使用vscode查看nginx源码】下载并解压源码,用vscode打开源码的src目录打开后:nginx源码入口函数定位(选择区分大小写,全字匹配)【使用Source Insight进行查看】可参考文章:《SourInsight使用说明》【使用Visual Studio进行查看】可参考文章:《使用VS2019管理和阅读开源代码实践》...原创 2020-11-21 15:01:29 · 322 阅读 · 0 评论 -
(C++通讯架构学习笔记):nginx的整体结构、进程模型
nginx的整体结构、进程模型【master进程和worker进程概览(父子关系)】启动nginx,看到了一个master进程,一个worker进程 ps -ef命令查看信息第一列:UID,进程所属的用户id 第二列:进程ID(PID),用来唯一的标识一个进程。 第三列:父进程ID(PPID)。worker进程是被master进程通过fork()创建出来的,worker进程是master进程的子进程,master是父进程。...原创 2020-11-21 14:05:15 · 129 阅读 · 0 评论 -
(C++通讯架构学习笔记):nginx简介、选择理由、安装和使用
nginx简介nginx(2002年开发,2004年10才出现第一个版本0.1.0):web服务器,市场份额,排在第二位,Apache(1995)第一位。 web服务器,反向代理,负载均衡,邮件代理,运行时需要的系统资源比较少,所以经常被称呼为轻量级服务器。 nginx是一个俄罗斯人(Igor Sysoev),C语言(不是c++)开发的,并且开源了。 nginx号称并发处理百万级别的TCP连接,非常稳定,热部署(运行的时候能升级),高度模块化设计,自由许可证。 很多人开发自己的模块来...原创 2020-11-20 20:48:51 · 641 阅读 · 0 评论 -
gdb调试学习与实践笔记 -- texinfo、help2man源码安装(CGDB安装补充)
通过源码安装texinfo网址:http://ftp.gnu.org/gnu/texinfo/wget http://ftp.gnu.org/gnu/texinfo/texinfo-6.7.tar.gz解压tar -zxvf texinfo-6.7.tar.gz生成配置文件./configure --prefix=/usr/local编译make安装make install官网:https://mirrors.sjtug...原创 2020-11-03 19:07:18 · 2128 阅读 · 0 评论 -
gdb调试学习与实践笔记 -- GDB TUI及CGDB的使用
目录GDB TUI使用开启 GDB TUI 模式窗口焦点切换GDB 高级扩展工具:CGDBCGDB 安装使用CGDBGDB TUI使用开启 GDB TUI 模式开启 GDB TUI 模式有两个方法: 方法一:使用 gdbtui 命令或者 gdb-tui 命令开启一个调试 gdbtui -q 需要调试的程序名 方法二:直接使用 GDB 调试代码,在需要的时候使用切换键Ctrl + X + A调出 GDB TUI (再按一次退出TUI) ..原创 2020-11-03 17:52:17 · 1986 阅读 · 0 评论 -
gdb调试学习与实践笔记 -- 常用命令解析3
目录disassemble 命令 查看某段代码的汇编指令set args 、show args 命令设置及查看命令行参数tbreak 命令 添加临时断点watch 命令监视一个变量或者一段内存display 命令监视的变量或者内存地址中断后自动输出值disassemble 命令 查看某段代码的汇编指令可能需要查看某段代码的汇编指令去排查问题,或者是在调试一些没有调试信息的发布版程序时,也只能通过反汇编代码去定位问题GDB 默认反汇编为 AT&T 格式的指...原创 2020-11-03 14:09:03 · 643 阅读 · 0 评论 -
gdb调试学习与实践笔记 -- 常用命令解析2
目录info 和 thread 命令info args查看当前函数的参数值next命令(简写为 n)让 GDB 调到下一条命令去执行step命令(简写为s)遇到函数调用,进入函数内部finish / return命令 回到上一层调用处ntil命令(简写为u)可以指定程序运行到某一行停下jump命令(简写为j)跳转到指定位置执行info 和 thread 命令info 命令是一个复合指令,可以用来查看当前进程的所有线程运行情况。 使用 run ...原创 2020-11-03 12:17:33 · 766 阅读 · 0 评论 -
gdb调试学习与实践笔记-- 启动调试
gdb调试实践笔记gdb安装及基本使用 yum install gdb调试程序时,为了能清晰地看到调试的每一行代码、调用的堆栈信息、变量名和函数名等信息,需要调试程序含有调试符号信息,在使用gcc编译程序时,加上-g选项。gcc -g -o xxx xxx.c判断调试程序是否带有调试信息? 使用 gdb 来调试一下该程序,gdb 会显示正确读取到该程序的调试信息,在终端输入gdb test查看显示结果即可: 不加-g 进行测试:【注】:...原创 2020-11-02 19:35:45 · 182 阅读 · 0 评论