自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(92)
  • 资源 (9)
  • 收藏
  • 关注

原创 加密隧道技术

在现在的互联网上传输数据,首要考虑的就是安全。这关乎到你的隐私,个人信息,财产安全等等重大问题。如果你的程序本身传输的信息没有加密,也可以通过其他辅助方式让你的通信加密。一些工具的就是为了解决这样的场景的,即数据先通过源端代理,让你的所有通信数据都加密,然后到达目的后再使用目的端代理进行解密后转发给目标进程。即加密隧道的简单示意图如下所示:加密隧道的起始即为源端代理和目的端代理。其中数据发送进程和源端代理可以是同在一个主机的不同进程,也可以是分属不同的主机。目的端代理和数据接收进程也一样。

2024-03-02 18:33:43 1039 1

原创 openvpn配置使用静态密钥

openvpn客户端在和服务端建立连接时,一般建立ssl通信,流量都需要经过加密。正常建立ssl连接的时候,流程是很复杂的,需要握手信息,需要验证证书,需要协商和交换对称加密密钥。这个对称加密密钥是用来做什么的呢?其实ssl在建立连接前期的协商步骤中使用非对称加密算法(一般为RSA算法),是为了交换某些生成后续对称加密密钥所必须的信息,避免在网络中明文传输对称加密的密钥。一旦协商完成,对称密钥也就交换完成,后续的通信,都是使用对称加密来通信。为什么不能全程都使用非对称加密来加解密数据?

2024-02-25 15:07:24 1121

原创 openvpn组网技术原理及配置过程(centos服务器/安卓客户端/linux客户端)

最近研究了一段时间的openvpn组网技术,也试着搭建了一个openvpn环境,大概理解了其中使用的一些技术原理,还是记录一下。本篇文章对专业搞网络的人也许用处不大,但是对于初次接触这些技术(比如vpn,代理技术,加密隧道,防火墙,路由,局域网组网)的人还是有一定价值的,便于理清整个vpn组网技术的脉络,也可以在遇到问题的时候自己排查。openvpn是众多vpn种类的一种,是一个开源的产品,也是应用最广泛的一种vpn。支持的平台很多,我们常用的系统平台linux,window,安卓都支持。

2024-02-24 23:58:36 2556 5

原创 VirtualBox 网络连接配置

我们在windows上使用linux虚拟机,一般网络需要两个要求:1、虚拟机里面要能访问到外网(互联网) 2、能从宿主机连接进入到虚拟机 在virtalbox的设计看来,这两个需求是独立的,因此就设计了不同的网络连接方式。最常用的是 网络地址转换(NAT)和 仅主机(Host-Only)网络。其中网络地址转换(NAT)是为了使虚拟机能通过虚拟的 NAT设备接入外网,而仅主机(Host-Only)网络就是为了能从宿主机能访问到虚拟机。

2023-12-28 15:09:49 1100 1

原创 RocketMQ 相关文档

官方文档:Rocketmq 5.x架构介绍文章:

2023-09-24 09:52:20 106

原创 std::cin C++标准输入流

用了那么久的c++,都没有深入去学习一下c++的标准输入流(cin),标准输出流的(cout)的用法,一般只是简单的使用去获取一个字符串或者几个整型输入。但是发现如果遇到了比较复杂的输入,这简单的三板斧就不够用了,需要考虑空白符(空格,tab,换行符等)的影响。而c++又提供了cin.get,cin.getline,std::getline,等不同的类方法和全局函数,没深入的了解的咋一看就有点晕,这几个函数到底有啥区别?又有哪些坑?下面是我自己的一些补充。

2023-06-11 15:57:23 1255

原创 linux C/C++ 后端服务问题排查(gdb, pstack,valgrind)

在linux上运行的c/c++程序,一般是没有界面的,一般都需要打印运行日志,通过日志来定位问题。但是日志不是万能的,有时候日志没有输出我们的想要的信息,如果增加日志还要程序重新编译部署发布,如果是生产上的服务,为了排查一个问题就要发布版本,那这肯定是得不偿失的。除了日志,linux上我们还有很多手段去帮助我们排查程序问题,就是linux提供了很多有用的命令行工具让我们查找问题。这里我总结了经常使用的几个命令的用法,gdb, pstack,valgrind。

2023-03-02 18:50:32 986 1

转载 openssl库生成CA证书,服务端证书,客户端证书

openssl库生成CA证书,服务端证书,客户端证书。参考这篇博客,很详细,按着他的步骤来不会出错,可以留作以后备用。

2023-02-15 10:04:34 304

转载 虚拟机文件瘦身

减小VirtualBox虚拟硬盘文件的大小 (bbsmax.com)

2023-02-03 17:29:00 164

转载 【转】SSL/TLS 双向认证

单项认证和双向认证的流程,这篇文章讲的比较全。

2022-12-22 11:32:33 204

原创 在CentOS下安装MySQL

最近自己centos虚拟机里面的mariadb忘记了密码,登录不进去了,解决安装一个mysql。

2022-07-29 11:34:47 239

原创 windows换行符(\r\n)与unix换行符(\n)互转

因为windows下文本的换行符为\r\n,而unix下只为\n,因此windows换行符(\r\n)与unix换行符(\n)互转,最直观的做法是直接用sed替换。windows换行符转unix换行符:sed -i -e 's/\r\n/\n/g' test.txtunix换行符转windows换行符:sed -i -e 's/\n/\r\n/g' test.txt

2022-05-14 12:23:16 4279

原创 基于 gmssl实现的sm2加密(C++)

项目中需要用到sm2加密,在网上搜索了一下相关的库,发现只有openssl和gmssl这两个库可以用,于是基于gmssl库做了封装,gmssl的版本是:GmSSL 2.5.4 - OpenSSL 1.1.0d 19 Jun 2019搞这个库的确要费不少功夫,现在分享出来给需要的人。目前我是用在linux环境中,因此编译成linux动态库,并且屏蔽相关库的头文件和符号,只暴露sm2加解密相关的接口符号,gmssl库通过静态库的方式引用。...

2022-04-16 11:47:55 7627 13

原创 解决Linux多个动态库间的符号冲突问题

那linux下有没有类似window下的显式导出功能呢,有的。下面是介绍一种常用的只导出指定符号的方法。 1、加编译器选项fvisibility=hidden,加了这个选项后,默认的符号都不会导出 2、在需要导出的函数或者类名前加__attribute__ ((visibility("default")))一种是在编译期解决,就是在编译动态库的是加参数-Wl,-Bsymbolic 这个参数是传给链接器的,这个编译参数的作用是:优先使用本动态库中的符号,而不是全局符号。

2022-04-12 18:42:33 6431

原创 解决window下使用git clone时没有提示输入用户名密码认证的问题(gitlab使用https协议)

最近在我的windows电脑上,使用了一个新的gitlab账号去拉取新建的git project代码,使用git clone xxxx.git 的时候直接提示找不到项目或者该账号没有权限查看,连提示输入用户名密码验证的步骤都没有,很纳闷,这个项目就是我自己在网页端建的,不可能不存在或者没有权限,在网上找了下原因,原来是 window保存的凭据在作怪。因为之前用其他同事的账号在gitlab上拉过其他项目的代码,window就记住了这个用户名密码,后面再访问gitlab的时候,因为默认使用的是windows保存

2022-04-10 15:04:00 5737

原创 awk 命令使用示例

1、 如何在awk脚本内部调用shell命令2、awk 脚本内部如何获取外部变量3、awk 数组4、使用awk 去除重复行比较简洁的写法是下面这样:echo -e "aaa\nbbb\naaa"| awk '!a[$0]++'但是上面的写法比较难理解,比较易懂的写法如下:echo -e "aaa\nbbb\naaa" | awk '{ if (!a[$0]++) { print $0 } }'5、awk 脚本内部给外部变量赋值

2022-04-07 16:34:49 785

转载 【转】go socket编程(详细)

这篇文章比较详细:go socket编程(详细)

2022-02-18 10:24:46 980

原创 boost asio实现的TCP客户端(同时支持ssl)

因为要开发TCP客户端用于网络通信,用c++来写,要实现跨平台在window和linux都能用的话,自己去封装原始的套接字操作,要兼容linux和window两个平台,有点困难,工作量也不小,于是用了现有的别人封装好的库,boost的asio来封装一个TCP客户端。 boost 的asio是一个优秀的全异步跨平台的网络通信库,不过源码都是用模板来写的,看起来比较吃力。因为通信也有需要用到SSL的情况,所以设计的TcpClient兼容普通的套接字通信和ssl通信,可以作为初学者的借鉴,分为4个文件,代码如下:

2022-02-15 15:01:06 4899 1

转载 keepalive+Nginx 配置实现高可用

参考这篇文章,写的简介易懂Linux集群之keepalive+Nginx

2021-11-22 17:46:43 113

原创 windows 下查看库文件符号的工具dumpbin(类似linux的nm)

1、对于静态库dumpbin -SYMBOLS 库文件在命令行中使用上述指令查看库中的显示函数和数据对象。2、对于动态库dumpbin -EXPORTS 库文件在命令行中使用上述指令查看库中的显示函数和数据对象。只要安装了vs,就有这个工具,这个工具不能在一般的命令提示符下执行,因为找不到这个命令。可以在“vs 命令提示符”中执行,怎么打开这个命令提示符呢?如下:开始->所有程序->Microsoft Visual Studio 2010->Visual Studio

2021-07-23 15:38:18 2030 1

转载 go mod模式下引用本地包/模块(module)的方法

参考:go mod模式下引用本地包/模块(module)的方法

2021-07-22 22:32:37 1280

原创 解决ycm超时问题

vim在编辑文件的时候,经常会 报错: HTTPConnectionPool(host='127.0.0.1', port=58833): Read timed out. (read timeout=30)导致编辑器卡住,无法编辑,在网上搜了一下,是我安装的ycm插件问题,通过使用 --system-libclang 编译 YouCompleteMe 解决::cd ~/.vim/bundle/YouCompleteMe/./install.sh --system-libclang --clang.

2021-07-18 00:05:24 528

原创 解决centos ssh可以使用却无法传文件的问题

今天想在宿主机windows和虚拟机linux里面传文件,发现无论是用sz还是pscp,都无法使用,提示是SFTP的问题,上网百度了一下,解决办法是修改/etc/ssh/sshd_config文件将Subsystem sftp /usr/libexec/openssh/sftp-server改为Subsystem sftp internal-sftp重启后就可以了,不知道这是啥原理,之前是好好的可以用,这个虚拟机是从vm ware 移植到virtual bo...

2021-07-17 09:41:12 2126

原创 vscode远程开发 配置

vscode 强大的功能,可以在远程机器上开发c++ go等,跟在本地开发一样,下面是我参考别人的博文进行配置的VSCODE远程开发 golang环境配置

2021-07-16 22:49:42 99

原创 解决 vscode下载go相关插件失败的问题

很多初学者使用vscode的时候,出现最多的问题就是插件安装失败的问题,而插件安装失败最多的问题就是下载失败,本文主要解决go插件安装失败的问题因为一般go是插件都是国外网站上的,我们国内很多时候是下载不下来的,因此可以使用一个代理去访问,只需要在安装go的机器上执行下面这两条命令go env -w GO111MODULE=ongo env -w GOPROXY=https://goproxy.io,direct第一个命令是开启go的模块管理功能,这是go新引入的一种包管理方式,是基于go.m

2021-07-13 21:29:34 576 2

原创 解决vscode在编译c++文件时控制台输出乱码问题

刚使用vscode的时候,配置就花了不少功夫,刚开始编译c++文件的时候就出现了乱码,后来自己摸索了一下解决了,贴一下解决过程,希望能帮到遇到同样问题的朋友。前提是我使用的MSVC编译器cl.exe这个乱码的原因应该是编译器cl.exe输出的编码是GBK,而如果使用vscode的powershell,默认是UTF8编码,这样的话,cl.exe的错误信息在powershell上输出,就是乱码,解决问题的关键就是指明使用window的命令提示符shell,而不是使用vscode自带的powershell

2021-04-09 09:17:32 3341

原创 vscode c++开发配置

我原来使用的是Microsoft Visual Studio进行c++程序开发的,最近想试试用vscode来开发,vs毕竟太庞大了,vscode更轻便一些,使用过一段时间后,发现vscode还是不错的。首选说明,vscode只是一个代码编辑工具,代码的编译和调试,还需要安装其他的编译调试工具,比如微软的MSVC,或者使用gcc+gdb,MinGW等等。这里贴一下官方的文档:https://code.visualstudio.com/docs/languages/cpp--这个是vscode 做c+.

2021-04-05 19:07:30 384

原创 使用互斥锁和条件变量实现windows的Event

#include<iostream>#include<unistd.h>#include<pthread.h>using namespace std;class DEvent{ public: DEvent(bool bSet):bSet(bSet) { pthread_mutex_init(&mutex, NULL); pthread_cond_init(&cond, NULL); } ~DEvent().

2021-02-27 18:18:21 268 1

原创 c++移动语义(std::move)

c++11 引入了左值,右值,移动构造函数,移动赋值函数等新概念,其实都是为了支持移动语义而引入的c++11引入了左值和右值的概念:左值:能取使用&获取到地址的都为左值 右值:不能获取地址的为右值,匿名变量一律为右值 std::move()函数将左值转化成右值 右值引用主要用于移动语义(move)和完美转发移动构造函数的功能:1.移动构造函数一般是在类中需要深拷贝(即成员变量含有指针类型,内容存放在堆中)的时候才需要用,移动构造函数的功能跟拷贝构造函数的功能类似,有一点不同.

2021-02-27 13:48:15 710

原创 boost asio异步服务端实现步骤

(1)首先要初始化一个io_serviceboost::asio::io_service iosrv;(2)然后需要用一个iosrv的实例来初始化一个acceptorboost::asio::ip::tcp::acceptor acceptor(iosrv);(3)然后需要调用acceptor对象的open函数boost::system::error_code ec;acceptor.open(boost::asio::ip::tcp::v4(), ec);(4)然后调用acce

2021-02-26 23:31:54 1761

原创 关于goroutine调度器是否是抢占式的问题

最近在看协程的实现,想弄明白go的调度器是不是抢占式,如果某个goroutine运行的时间太久,并且没有主动让出cpu,go调度器是否会切换到其他goroutine运行。看了一些其他的文章,总结了一下,go的调度器勉强算的上是抢占式的,但是不是在所有情况下都能抢占。按照go调度器的设计,最终还是让长时间运行的goroutine自己放弃cpu的,以主动放弃达到抢占的目的。go调度器会起一个守护线程去监控各个协程的运行时间,一旦某个协程运行超时,就给这个协程的栈空间设置一个超时的标志位,协程在运行...

2021-01-27 17:03:06 881

转载 c++11 移动构造函数,左值和右值,移动语义

参考文章:C++11的移动语义

2021-01-17 18:10:01 134

原创 使用websocket++/websocketpp库在服务重启后报[info] asio listen error: system:98 (地址已在使用)端口重用的问题

项目在使用websocket++这个开源库,作为websocket的服务器端来跟网页通信,虽然可以使用,但是有个问题就是在linux下的服务每次在关闭后马上启动,就会报端口重用的错误:[2020-07-22 11:10:13] [info] asio listen error: system:98 (地址已在使用)如果把服务停掉等待一分多钟后启动,就不会报这个错误了,说明端口已经被释放。如果监听的套接字设置套接字选项SO_REUSEADDR,就能解决,一般而言,作为服务器监听的套接字都必须设置这个套

2020-07-23 14:44:28 2279 1

原创 websocketpp/websocket++库教程/服务端代码封装

websocketpp这个库是开源的,我在项目中引用,感觉还是把代码开源出来给需要的人比较好。我自己对这个库进行了简单的封装,可以做出动态库或者so库,使用起来也方便。我只提供封装后的代码,至于websocket库的编译和项目配置需要自己去做。web_sock_server.h头文件#pragma once#include "pch.h"#include <string>#include <boost/thread.hpp>#include <boost/fu

2020-07-23 14:36:26 5060 2

转载 基础背包问题动态规划解法详细解答【转】

最近在刷大厂的编程题,发现很多题目都需要用到动态规划去求解,自己都是只知道用穷举的方式去解,实在是low。学习动态规划,看了别人说的背包问题九讲.pdf,依然是云里雾里。对我这样的小白来说,感觉描述的不是很清楚。然后找到了下面的博文,终于搞清楚实现过程。特意分享出来,给和我一样小白的童鞋。01背包问题 图解+详细解析 (转载)...

2020-07-20 14:38:34 145

原创 centos 升级gcc

最近使用自己的虚拟机编译项目文件,发现报错:/root/yimi/serv_dev_camera_proxy/serv_dev/esb_middleware/output/linux/bin/libboost_locale.so:对‘std::__throw_out_of_range_fmt(char const*, ...)@GLIBCXX_3.4.20’未定义的引用/root/yimi/serv_dev_camera_proxy/serv_dev/esb_middleware/output/lin

2020-06-10 10:16:21 2375 1

原创 升级linux c++标准库

最近在自己的虚拟机运行某个项目用到的程序的时候,报错:./yimi_camera_proxy: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by ./libexport_cpp_utility.so)./yimi_camera_proxy: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by ./libexport_cpp_u

2020-05-19 12:27:24 2851

原创 C++11实现的单例工厂模式

工厂模式的主要目的是将具体类的实例化延迟到子类,但是一般的工厂方法模式,如果新增加一种产品,必须先要增加一个相应的工厂类。现在发现可以用c++的模板来实现,新增一种产品不需要新增一个工厂类/************************************************************************* > File Name: factory.cpp > Author: ma6174 > Mail: [email protected]

2020-05-16 11:49:36 720

转载 【转】c++11单例模式

c++11单实例(singleton)初始化的几种方法(memory fence,atomic,call_once)

2020-05-16 11:31:29 144

原创 STL vector容器迭代器失效的几种情况

vector迭代器失效,最常见的是在删除元素(erase())的时候,然鹅根据vector的实现原理,在vector扩容的时候应该也会出现迭代器失效的情况。看下面的例子:#include <vector>#include <iostream>#include <algorithm>#include <functional>u...

2020-04-23 19:51:38 1080

xshell6.7z

免费的xshell6只能开4个标签,本资源可以开任意个,好东西分享一下

2019-10-14

redis安装脚本setup.sh

有时候在linux上安装个程序就很麻烦,要看教程,找地方下载,安装编译,很多时候各种各样的错误需要解决,最近准备学习redis,需要安装一个,正好看到开源项目Teamtalk里有自动安装的脚本,特地分享出来,一个命令就能完成,全自动安装redis 省事方便

2019-08-19

boost_1_70_0.tar.gz

boost安装包,Linux下的,我还写了一篇在centos安装boost的博客,下载这个安装包之后可以到我的博客去看安装步,骤链接地址:https://blog.csdn.net/hacker_lpy/article/details/95211566

2019-07-09

二叉查找排序树的实现代码

最近在研究数据结构这本书,自己动手实现的一个二叉查找排序树的类BinSortTree,实现数据的插入,查找,删除,层序遍历,中序遍历等操作,熟悉数据结构的朋友都知道,根据二叉排序树的定义,中序遍历后得到的序列就是按照从小到大的顺序排列的,而最后删除二叉排序树的时候,要先删除子节点,才能删除父节点,其实就是一个后续遍历的过程。现在把代码分享一下,供大家参考学习。其实这个跟stl的set容器已经十分相似,只是set使用查找性能更优越的红黑树来实现

2018-05-30

MFC GroupBox自绘控件,可以方便改变边框的颜色

由于项目需要,需要自绘一个GroupBox,可以方便改变边框颜色,可以设置显示的字体

2018-03-31

MFC自绘按钮,可以方便的改变按钮的背景颜色和文本颜色

MFC自绘按钮,可以方便的改变按钮的背景颜色和文本颜色,自绘按钮实现按钮的一般功能,,按钮状态有按钮点击,鼠标移动,鼠标按下,获取焦点,按钮禁用等,已经实现比较完整的自绘。

2017-08-29

基于控制台的远程控制程序

实现在远程主机中执行dos命令,传输文件,截屏,查找文件等功能,对刚接触socket编程的初学者很有用。

2015-07-31

局域网文件传输

本代码经vc调试通过,可以进行文件传输和在线聊天功能

2014-08-15

FTP文件传输以及即时通信

此程序可以实现计算机之间的文件传输,也具有即时聊天的功能。分为客户端和服务端,服务端运行后客户端发出连接请求进行连接,成功建立连接之后,服务端可以给客户端传输文件。运行服务端和客户端的两台机子可以和qq一样进行文字聊天

2014-07-15

空空如也

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

TA关注的人

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