自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Nagle算法

Nagle算法主要是避免发送小的数据包,要求TCP连接上最多只能有一个未被确认的小分组,在该分组的确认到达之前不能发送其他的小分组。在默认的情况下,Nagle算法是默认开启的,Nagle算法比较适用于发送方发送大批量的小数据,并且接收方作出及时回应的场合,这样可以降低包的传输个数。但是如果你的程序是 write-write-read 模式,在使用了Nagle算法后,第二个 write 就会被推后一个RRT发送而造成一个很长的ack等待,从而产生一个延迟。

2024-05-15 21:04:56 298

原创 SIGPIPE信号与SO_REUSEADDR

而当我们使用了SO_REUSEADDR 选项后,服务器退出后,仍然允许我们马上重启进程。对于这种情况,如果在服务端没有做特殊处理,有一个客户端意外退出,造成连接关闭,而服务端如果此时发送消息的话,就会收到 SIGPIPE 信号,导致服务端进程结束。对于网络IO来说,当我们关闭了一个连接时,此时我们再往连接中写入数据,那么也会收到一个 SIGPIPE 信号。当向一个已经关掉的管道写数据,write系统调用会返回一个 SIGPIPE 信号,该信号默认结束进程。

2024-05-15 20:24:24 286

原创 安全关闭Tcp连接

第一行是我们输入的数据,这些数据会发送给sender,最后一行是我们接收到的数据大小,很明显是比原来的要少的。这是因为sender本身并没有read操作,所以这些输入的数据会滞留在缓冲区,但是sender发送完数据,直接调用close,根据前面对close的介绍,这时候sender会发送一个RST,导致Tcp连接强行断开,所以nc并没有完全接受完数据。当前在套接字发送缓冲区中的数据将被发送掉,后跟TCP的正常连接终止序列。关闭读功能,套接字中不再有数据可接收,而且套接字接收缓冲区中的现有数据都被丢弃。

2024-05-08 20:08:52 368

原创 RoundTrip测试RTT时延

总体相比,tcp所用的往返时间还是比udp的往返时间要长,而在同一机器下,理想状态下,时钟差应该为0才对,但是两种方式都各自计算出了不怎么接近0的数值。Device A发送一个NTP报文给Device B,该报文带有它离开Device A时的时间戳,该时间戳为10:00:00am(T1)。当此NTP报文离开Device B时,Device B再加上自己的时间戳,该时间戳为11:00:02am(T3)。当Device A接收到该响应报文时,Device A的本地时间为10:00:03am(T4)。

2024-05-07 11:05:56 522

原创 Tcp自连接

查看正在监听的tcp端口,然后我们再从ip_local_port_range,可以通过以下命令查看ip_local_port_range。所谓自连接,就是tcp两端使用了同一个端口进行连接,即localhost:port->localhost:port。前面一个就是我们的源端口,而后面一个就是我们的目的端口,而地址都是我们的本地地址,我们可以看见已经出现了自连接的情况。如果客户端和服务端都在同一个环境,并且客户端先于服务端启动,那么很有可能产生自连接的现象。我们选取一个没有正在监听的端口,可以通过。

2024-04-29 21:07:45 552

原创 阻塞IO下的echo实验

我们在设计协议的时候,可以先让客户端发一个header,告诉服务端数据的长度,然后服务端在接收到header后,准备好一个符合大小的buffer,将数据全部读取到buffer当中,之后再返回数据给客户端。:由于服务端在每次recv4K字节后需要send数据给客户端,但此时客户端正在send数据的过程中,没有recv数据,导致服务端send阻塞。:由于服务端阻塞在send中,没有继续recv数据,导致客户端也陷入send阻塞当中。客户端的逻辑主要就是,建立连接,发送数据,查看Recv-Q和Send-Q。

2024-04-27 12:28:31 217

原创 ttcp测试网络吞吐量

用来表示网络的通信线路传送数据的能力,通常是指单位时间内从网络中的某一点通过另一点的最高数据率,即网络设备所支持的最高速度。ttcp_blocking.cc就是简单的客户端服务端通信(阻塞IO),通信的过程中加入测试的逻辑。ttcp代码位置:muduo-master/examples/ace/ttcp。还有非阻塞IO版的,也就是ttcp.cc,大部份依照回调函数的方式实现。:表示单位时间内通过某个网络(或信道、接口)的数据量。环境:两条桥联的虚拟机(Centos)两种方式吞吐量差不多。

2024-04-26 20:54:13 269 2

转载 解决Nginx出现403 forbidden (13: Permission denied)报错的四种方法

nginx与到403错误的解决方式

2023-01-28 16:53:34 831

原创 docker命令

详情:docker命令

2020-11-13 09:53:25 100

原创 hexo插入本地图片

1.安装插件npm install https://github.com/CodeFalling/hexo-asset-image -- save不要使用以下这个npm install hexo-asset-image –save这个bug的2.修改配置文件设置站点配置_config.yml:将post_asset_folder: false改为post_asset_folder: true修改之后,当我们创建一个新博客的时候,会出现一个同名的文件夹,我们需要把图片放到那个文件夹里,这里

2020-08-01 09:53:36 381 2

转载 ioctl函数详细说明

ioctl 函数 本函数影响由fd 参数引用的一个打开的文件。 #include<unistd.h>int ioctl( int fd, int request, .../* void *arg */ );返回0 :成功    -1 :出错 第三个参数总是一个指针,但指针的类型依赖于request 参数。我们可以把和网络相关的请求划分为6&nbsp...

2020-07-28 10:48:39 1084

原创 Unix高级编程--函数fcntl

函数原型:int fcntl(int fd, int cmd);int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock);fcntl函数有5种功能:复制一个现有的描述符(cmd=F_DUPFD).获得/设置文件描述符标记(cmd=F_GETFD或F_SETFD).获得/设置文件状态标记(cmd=F_GETFL或F_SETFL).获得/设置异步I/O所有权(c

2020-07-23 11:16:29 137

原创 Unix环境高级编程-用户ID与组ID

与一个进程相关联的ID有6个或更多。实际用户ID和实际组ID标识我们究竟是谁。这两个字段在登录时取自口令文件中的登录项。通常,在一个登录会话期间这些值并不改变,但是超级用户进程有方法改变它们。有效用户ID.有效组ID以及附属组ID决定了我们的文件访问权限。保存的设置用户ID和保存的设置组ID在执行一个程序时包含了有效用户ID和有效组ID的副本。通常,有效用户ID等于实际用户ID,有效组ID等于实际组ID。更换组ID和用户ID#include <sys/types.h>#inc

2020-07-20 23:15:08 121

原创 Unix环境高级编程-系统数据文件和信息

口令文件unix系统口令文件,也有称其为用户数据库的,一般有以下各字段,这些字段包含在<pwd.h>中的passwd结构体中。#include <sys/types.h>#include <pwd.h>struct passwd{ char *pw_name; /* 用户登录名 */ char *pw_passwd; /* 加密口令 */ __uid_t pw_uid;

2020-07-20 20:27:48 83

原创 C/C++之指针与数组

C/C++的指针涉及到内存相关的知识,是C/C++中十分重要的一块知识之一。本篇博文通过一小段代码来理解指针的相关用法。数组与指针关系代码:#include <stdio.h>int main(){ char str[] = "abcdef\r\n"; char *p = &str[3]; //指向str[3],即d这块内存 p = p - 1; //指向前一个地址。即c *p = '9'; //修改当前地址的内容 printf("%s\r\n", p); pri

2020-07-20 11:05:10 97

原创 编写一个简单的日志系统

在编写服务器代码的时候,往往需要编写一个日志模块。日志系统可以存放一些服务器运行情况的相关数据,方便后面服务器出现bug时可以查看相关的问题。日志系统的实现主要分为两个功能1.获取当前的时间2.将相关内容写入日志文件获取当前时间主要用到了以下函数及结构体#include <time.h> localtime - 将时间数值变换成本地时间,考虑到本地时区和夏令时标志 函数声明: #include <time.h> stru

2020-07-18 11:09:34 779

转载 VS2017连接MYSQL 8.0(小白必看!)

< 首先用到的工具是:安装过程自行操作!!!MySQL下载地址:https://dev.mysql.com/downloads/windows/MySQL命令手册:http://www.w3school.com.cn/sql/sql_syntax.asp最下面有带注释的详细测试源码和效果图;对接步骤1:右键单击项目名称...

2020-07-12 19:36:54 296

原创 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C3861 “managerMenu”: 找不到标识符

编译程序时,出现了以下问题:严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C3861 “managerMenu”: 找不到标识符原因时调用函数,但之前没有编写函数声明,解决方法:在前面加入函数的声明void managerMenu(Identity*& manager);问题解决。...

2020-07-11 23:58:48 9998

原创 Linux下shell脚本出现“权限不够”和“坏的解释器: 没有那个文件或目录”问题

今天在运行脚本时,出现了两个问题。问题一[lin@localhost miniftpd]$ ./miniftpd.sh-bash: ./miniftpd.sh: 权限不够解决方法:执行下面指令添加权限chmod u+x miniftpd,shu 代表用户.g 代表用户组.o 代表其他.a 代表所有.问题二[lin@localhost miniftpd]$ ./miniftpd.sh-bash: ./miniftpd.sh: /bin/bash^M: 坏的解释器: 没有那个文件或目

2020-07-10 14:05:42 7319 1

原创 spawn-fcgi:child exited with: 127

spawn-fcgi -a 127.0.0.1 -p 10000 -f ./bin_cgi/register执行这条指令之后,发现出现以下错误:spawn-fcgi: child exited with: 127解决方法:查看register的依赖ldd register结果如下:发现libhiredis.so.0.13 no foud执行以下指令,目的是将该库添加软链接到动态库目录下:ln -s /usr/local/lib/libhiredis.so.0.13 /usr/lib

2020-07-03 17:35:25 509

转载 error: multiple definition of `Common::Common(QObject*)‘

错误原因重复定义解决方法打开QT工程文件.pro查看SOURCES += \ 以及 HEADERS +=下方是否有重复的源文件名或头文件名,删掉重复的即可

2020-06-30 21:48:53 142

转载 解决nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed错误

重新启动服务器,访问web服务发现无法浏览啦!登陆服务器之后进到nginx使用./nginx -s reload重新读取配置文件,发现报**nginx: [error] open() “/usr/local/nginx/logs/nginx.pid” failed (2: No such file or directory)**错误,进到logs文件发现的确没有nginx.pid文件[root@localhost sbin]# ./nginx -s reloadnginx: [error] open()

2020-06-28 19:43:42 416

转载 warning: LF will be replaced by CRLF in 的原因及解决办法

今天在使用git add 命令的时候,弹出了一个警告 warning: LF will be replaced by CRLF in(具体的一个文件)原因LF和CRLF其实都是换行符,但是不同的是,LF是linux和Unix系统的换行符,CRLF是window 系统的换行符。这就给跨平台的协作的项目带来了问题,保存文件到底是使用哪个标准呢? git为了解决这个问题,提供了一个”换行符自动转换“的功能,并且这个功能是默认处于”自动模式“即开启状态的。这个换行符自动转换会把自动把你代码里 与你当前操作系统

2020-06-19 13:16:11 3267

原创 如何将Excel表格的数据导入mysql数据库中

使用工具: NavicatNavicat是一套快速、可靠并价格相当便宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设。它的设计符合数据库管理员、开发人员及中小企业的需要。Navicat 是以直觉化的图形用户界面而建的,让你可以以安全并且简单的方式创建、组织、访问并共用信息。1.我们先打开Navicat软件,然后连接上mysql数据库。2.如果没有表格的话,先在你需要导入数据的数据库中新建一个表格。建立数据表时一定建立与所导入表格拥有相同目标栏的表格。终端下输入:mysql> c

2020-05-21 10:21:20 1762

原创 不是有效的标识符 行3:未预期的符号

不是有效的标识符.:read: `KEYminiftpd.sh:行3: 未预期的符号 `$'in\r'' 附近有语法错误'iniftpd.sh:行3: `case "$KEY" in脚本语法是没有错误的,网上查询后应该是格式问题解决办法:安装一个文本转化工具dos2unix。各个平台使用的文本编码规范不同,导致了同一文本在不同平台中显示不同。大家知道,windows中的文本文件的换行符是"\r\n",而linux中是"\n"。由于换行符的不同,造成多行文本显示混乱,有时候会发生一些莫名其妙的状

2020-05-16 14:33:33 1337

转载 CentOS7yum安装出现/var/run/yum.pid 已被锁定,解决办法

才安装的CentOS7,本想安装gcc、gcc+,结果出现下面错误[root@bogon ~]# yum install -y gcc gcc+已加载插件:fastestmirror, langpacks/var/run/yum.pid 已被锁定,PID 为 11154 的另一个程序正在运行。Another app is currently holding the yum lock; wa...

2020-05-01 14:50:14 515

转载 socket()函数

点击打开原文链接函数原型socket()函数的原型如下,这个函数建立一个协议族为domain、协议类型为type、协议编号为protocol的套接字文件描述符。如果函数调用成功,会返回一个标识...

2020-04-29 20:11:58 94

原创 关于LeapFTP连接超时/连接失败问题

用LeapFTP连接时,出现原来是在配置vsftpd时没有设置好防火墙;解决方法:iptables -Fservice iptables save输入这两条指令即可解决啦!如果第二条指令输入有错,可参考以下:centos 7 中service iptables save 指令使用失败问题解决方案...

2020-04-28 19:26:24 1082

原创 centos 7 中service iptables save 指令使用失败问题解决方案

service iptables save 如果上述命令执行失败报出:The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use system...

2020-04-28 19:13:03 608

原创 虚拟机中Linux配置网络

在虚拟机中配置linux网络的方式有三种,下面是我在桥连模式下配置网络的过程:1.在虚拟机下安装好linux系统(我装了CentOS 7),具体安装方法大家可以参考网上教程,然后开启虚拟机。2.打开linux终端,并输入命令ifconfig,此时我们并没有查看到IPV4地址信息,但是我们知道了网卡信息ens33。3.我们切换到root模式下,开始静态配置网络地址,首先在命令行中输入dhc...

2020-04-22 09:19:19 1014

原创 关于Linux重启网卡时出现的问题

lob for network service failed because the control process exited with error code . See " systemctl status network.service“and”journalctl-xe’'for details在我们执行systemctl restart network service命令重启网卡时,...

2020-04-22 08:37:07 797

原创 CSDN如何转载别人的博客

CSDN如何转载别人的博客首先,我们先打开我们要转载的博客的网址,鼠标右击,并点击检查。在右边的代码框中选中想要复制的那部分(选中会有蓝色效果),鼠标右击选择copy->copyouterHTML.最后,在写文章处粘贴就OK啦!PS:转载文章一定要记得标注原文章的出处并标明转载。...

2020-04-21 14:17:20 58

原创 排序算法——希尔排序

希尔排序基本思想1.将待排序记录(线性表)以小于n的跨越增量d1分为d1个组,距离为d1倍数的记录在同一组内;2.在各组内分别进行直接插入(或交换)排序;3.取第二个跨越增量d2<d1,重复(1)和(2);4.直至dt=1为止 (dt<dt-1<…<d2<d1)。当d=7时,其实是分成了{7,82},{19,16},{24,44},{13,63},{31...

2020-04-20 17:10:06 198

原创 排序算法——堆排序

堆排序基本思想:在排序过程中,将数据看成一棵完全二叉树,利用完全二叉树中双亲结点和子结点的关系来选择关键值最小的记录。堆的定义:n个元素序列h1, h2, …, hn,当hi>=h2i, h2i+1时,或当hi<=h2i, h2i+1时,称为堆;前者称为大根堆,后者称为小根堆。以完全二叉树表示堆,以数组r[0…n-1]存储堆。堆调整:若结点i的左、右子树均为堆,将r[i]与...

2020-04-20 16:33:32 135

原创 启动MySQL报错:ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)

启动MySQL报错:ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061)今天在操作数据库时遇到这样的问题解决方法如下:1.打开计算机管理->服务和应用程序->服务,找到MySQL。2.双击,出现如下界面,点击启动,最后再点击确定就行。3.在终端输入mysql -u root -p...

2020-04-17 12:00:38 140

转载 Linux下安装cmake步骤详解(图文)

Linux下安装cmake步骤详解(图文)1.查看Linux位数:#getconf LONG_BIT 2.获cmake源码包,这里我先新建一个文件夹来存放cmake# mkdir app# cd /app# wget https://cmake.org/files/v3.3/cmake-3.3.2.tar.gz 3.解压源码包# tar xzvf cmake-3.3.2...

2020-04-17 11:49:52 622

原创 Linux配置yum源出现的问题

Linux配置yum源出现的问题错误如下:File contains no section headers. file: file:///etc/yum.repos.d/local.repo,原因是yum源没有配置好。解决方法如下:删除yum.repos.d目录下所有文件rm -r /etc/yum.repos.d/然后重新下载阿里的wget -O /etc/yum.repos...

2020-04-17 11:49:33 1405

原创 关于Xshell远程连接Linux的问题

关于Xshell远程连接Linux的问题首先,我们先在虚拟机上安装好Linux系统,接着安装好Xshell。Xshell连接Linux的的过程如下:1.点击文件->新建,出现如下界面:名称填自己喜欢的名字,主机号填Linux的ip地址(Linux的网络配置要配置好),主机号可在Linux终端下输入ifconfig命令查看,填好后点击确定即可。选择到刚刚建立好的会话,选择连接,就...

2020-04-14 16:12:10 189

原创 C4700 使用了未初始化的局部变量

C4700 使用了未初始化的局部变量我在使用VS2019编写C++程序时,碰到如下情况:问题所在:解决方法:我进入这个函数查看该函数的声明,发现这样就可以解决了,如下:只要把当中的list l改成list& l就可以了。具体原因我也不是很清楚,希望在往后的学习中能够搞清楚到造成这个结果的原因。...

2020-04-13 22:46:43 13430 2

原创 VS2019如何添加头文件路径

VS2019如何添加头文件路径大家在编写程序的时候往往会创建许多头文件,那么在VS2019中我们该怎么调用自己创建的头文件呢,其实只需要将头文件的路径添加到工程的编译环境中就行了,下面就来看看吧!1.点击项目->属性->C/C+±>常规->附加包含路径,将路径添加进去。最后再单击确定,就成功将自制的头文件路径添加成功啦!...

2020-04-13 22:43:35 17738

空空如也

空空如也

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

TA关注的人

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