自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 TCP/IP网络编程(11) 套接字和标准IO

此外,为了使用标准的IO函数,需要传入FILE结构体指针,而在创建套接字的时候,默认返回的是文件描述符,因此需要额外将文件描述符转换为FILE指针。套接字中的缓冲区主要是为了实现TCP协议而设立的,TCP在传输数据的过程中,如果丢失了数据,将会再次进行传输,而再次发送数据,意味着数据保存在了某个地方,并没有丢失,保存的地方就是套接字的输出缓冲区。使用标准IO函数还有一个好处,就是可以按字符串单位进行交换,而在前面的回声服务器的示例代码中,接收到的数据需要先转换为字符串(在数据的尾部插入0)。

2022-12-29 11:07:49 568 4

原创 TCP/IP网络编程(10) IO函数

在Linux下,一般使用read & write函数完成数据IO,因为Linux下的套接字,可视为文件,其操作方式与文件类似,当套接字分配之后,会为其分配对应的文件描述符。在Windows下,则需要使用recv & send函数完成数据IO。

2022-11-17 22:12:31 953

原创 Linux下GDB调试程序

GDB(全称:GNU Debugger)是GNU工程师为GNU操作系统开发的调试器。它可以用于调试C、C++、Objective-C、Pascal、Ada等语言编写的程序。

2022-08-20 19:01:40 1575

原创 TCP/IP网络编程(9) 进程间通信

但是,进程具有完全独立的内存结构,即使通过fork()函数创建的子进程,也不会与父进程共享内存,因此进程间通信需要通过其他的特殊方法完成。为完成进程之间的通信,需要创建管道,管道不属于进程的资源(即不是fork复制的对象),而是和套接字一样,属于操作系统资源,因此通过管道首实现IPC的原理是,两个进程通过操作系统提供的内存进行通信。通过创建两个管道,各自在进程间负责不同的数据流,即可方便的实现进程间双向通信,采用两个管道即可避免程序运行流程的预测或控制。方案1:通过一个管道实现两个进程间的双向通信。...

2022-08-18 17:35:24 720

原创 TCP/IP网络编程(8) 基于Linux的多进程服务器

接着服务端接收到客户端发送来的的EOF,并将其返回给客户端(此时客户端的接收功能并未关闭,还能正常接收服务端的EOF),客户端在判断接收到服务端发送来的EOF之后,结束接收流程,也同样调用main中后续的代码,执行close和return,此时客户端的socket又被关闭了一次,至此,客户端中的socket被成功关闭,子进程和父进程都结束。fork函数创建的是调用它的进程的副本,即它是复制正在运行的,调用fork函数的进程,此外,在fork()函数返回后,两个进程都将执行fork()函数后面的语句。....

2022-07-30 18:15:10 699

原创 CMAKE学习笔记

CMAKE是一个开源、跨平台的编译、测试和打包工具,它使用比较简单的语言描述编译、安装的过程,输出Makefile或者project文件,再去执行构建。当多人协同开发一个较大的项目时,会产生较多的源代码文,因此需要说明编译的顺序,例如需要先编译什么,再编译什么,这个过程称之为构建(Build),在构建的过程中使用的工具是make,对应的定义构建过程的文件称为Makefile;但是编写Makefile文件的语法较为复杂,尤其是对于大型的复杂项目,编写Makefile的过程则更为困难。3.1介绍/*......

2022-07-16 19:01:58 2422

原创 TCI/IP网络编程(7) 多播与广播

应用场景:假设服务端需要同时向10000个客户端发送同样的通知消息,如果利用TCP,需要维护10000个套接字连接,如果是基于UDP,也需要进行10000数据传输,向大量客户端发送相同的数据,会对服务器端和网络流量产生负面的影响。多播方式的数据传输是基于UDP完成的,因此其与UDP客户端/服务端的实现方式,区别在于,UDP传输以单一目标地址进行,而多播模式下,数据会同时传递到所有加入注册组的的主机,即采用多播方式的时候,可以同时向多个主机传输相同的数据。多播的数据传输特点:多播组是D类IP地址(244.0

2022-07-10 17:08:38 1168

原创 TCP/IP网络编程(6)

1. IO复用并发服务器的实现方法在网络程序中,数据通信时间比CPU运算时间占比更大,因此,采用并发的形式向多个客户端提供服务是一种有效利用CPU的方式。并发服务器的主要实现模型及方法如下所示:多进程服务器,通过常见多个进程提供服务 多路复用服务器,通过捆绑并统一管理IO对象提供服务 多线程服务器,通过生成与客户端等量的线程提供服务基于IO复用的服务器端:复用的概念:在一个通信频道中传输多个数据(信号)的技术。典型的例子:通信领域时分复用技术以及频分复用技术,在同一条通信线路上,分时传

2022-07-09 12:02:02 327

原创 Python进阶(课程学习笔记)

1. import底层原理假设先创建一个文件demonA.py,内容如下:# encoding: utf-8print("Test demon A")def add(a, b): """ :param a: :param b: :return: """ return a + bprint("End test Demon B")假设要在demonB.py文件中导入对应的demonA模块:# encodi.

2022-05-29 11:12:53 748

原创 TCP/IP网络编程(5)

1. 套接字可选项除了使用套接字的默认参数外,还可自定义设置套接字的多种参数:套接字的参数 协议层 选项名 读取 设置 SOL_SOCKET SO_SNDBUF O SO_RCVBUF O IPPROTO_IP .

2022-05-21 11:22:19 717

原创 TCP/IP网络编程(4)

TCP套接字的半关闭TCP的断开过程比建立连接的过程更加的重要,一般在建立连接的过程中不会出现大的问题,但是在断开连接的过程中,可能发生预想不到的情况。Linux中的close函数和windows下的closesocket函数意味着完全断开连接,既不能传输数据,也不能接收数据,因此在某些条件下,直接调用这两个函数显得不够优雅。如下图所示:假设主机A与主机B在进行通讯,主机A发送完最后的数据,调用close函数断开连接,之后主机A再无法收到数据B传输的数据,因此,由主机B传输的,主机A必须接收

2022-04-26 21:49:41 533

原创 TCP/IP网络编程(3)

基于DUP的服务端与客户端在TCP/IP网络编程(2)中,介绍了TCP/IP的四层模型,传输层分为TCP和UDP两种方式,通过TCP套接字完成数据交换已经进行了介绍,下面介绍通过UDP套接字完成数据交换。UDP套接字的特点UDP的通信原理类似于寄送信件,在寄信之前,需要在信封上写好寄信人信息和收信人的地址信息,之后贴上邮票放进信箱即可。但是信件传输的特点,使我们无法确认收信方是否成功收到了信件,以及寄信过程总,信件是否发生了丢失或者损坏,即这是一种不可靠的通信方式。与之类似,UDP同样提供的是一

2022-04-05 20:47:56 2290

原创 TCP/IP网络编程(2)

地址族与数据序列IP(Internet Protocol)是为了收发网络数据而分配给计算机的值。端口号是为了区分程序中创建的套接字而分配的序号。目前IP地址分为两类,IPV4(四字节地址族 ), IPV6(16字节地址族)。目前以IPV4地址为例,4字节IP地址分为网络地址和主机地址,且分为A,B, C, D, E类地址。...

2022-03-27 16:04:33 3534

原创 TCP/IP网络编程(1)

1. 套接字套接字是由操作系统提供的网络数据通信软件设备,,即使对网络数据传输原理不了解,也能够使用套接字完成网络数据传输。为了与远程计算机进行数据传输,需要连接到英特网,套接字就是进行网络连接的工具。服务端:接收连接请求的套接字创建流程如下:1. 调用socket函数创建套接字2. 调用bind函数分配IP地址和端口号(port)3. 调用listen函数,套接字转为可接受请求状态4. 调用accept函数接收连接请求简单的服务端程序:客户端:发起连接请求的套接字创建流

2022-03-09 22:07:45 3786

原创 python进阶(课程学习笔记)

简述Python中的实例方法,类方法,静态方法1. 实例方法: 与具体的实例相关,会传入一个必须的参数self。self代表被实例化的对象本身。实例方法中能够访问在构造函数__init__()中方初始化的成员变量。2. 类方法: 与类本身相关的方法。会传入一个必须的参数cls。cls表示当前类,无法通过cls访问构造函数__init__()中创建的成员变量。但是可以在类方法中修改类属性。类方法声明时,需要使用装饰器classmethod进行修饰3.静态方法: 静态方法,...

2022-01-16 18:16:38 453

原创 Qt的Assistant制作自定义的软件帮助界面(记录)

首先,需要编写好需要展示的html文档,作为Assistant显示的帮助文档,未提高效率,选择用VSCode配合Live server插件,编写html文档。(VSCode配合Live Server真好用~_~) 目录结构如下所示:CSS目录中存放html文件的css样式,Documents存放html文档,pictures存放html中引用的图片:book1.html<!DOCTYPE ht...

2021-07-29 16:06:37 1516 5

原创 windows批处理

常用命令:echo 回显命令 即将echo后面的内容显示到控制台上,需要辨别几处区别:例如对于如下的脚本:@echo offecho This is 1lineecho This is 2 line echo This is last line@pause@echo off 表示执行这条命令之后关闭所有命令的回显(包括当前这一条)echo off 关闭 除本条命令之外的所有命令的回显 ::echo off ::表示注释掉ech...

2020-11-12 14:56:44 303

原创 坐标图

#include "plotdlg.h"#include "ui_plotdlg.h"#include <QColor>#include <QPainter>#include <QPen>plotDlg::plotDlg(QList<QPointF> &data, QWidget *parent) : QDialog(parent), data(data){ ui = new Ui::plotDlg(); ui->setup.

2020-06-19 09:50:00 814

原创 Web后端学习笔记 Flask (14)redis

redis介绍:redis是一种noSQL数据库,它的数据是保存在内存中,同时,redis可以定时把内存中的数据同步到磁盘,即可以将数据持久化,并且它比memcached支持更多的数据结构,string, list, set, sorted_set, hashredis应用场景:1. 登陆会话存储,存储在redis中,与memcached相比,数据不会丢失2. 计数器/排行榜: 这...

2020-04-26 15:12:09 676

原创 Web后端学习笔记 Flask(13)memcached

memcached介绍:memcached相当于一个内存的缓存系统,数据原本是存储在数据库当中,memcached是一个内存级别的缓存系统,可以把数据存到内存当中,此时的访问速度就会更快。设计它的初衷就是加速网站的访问速度。memcached是一个高性能的,分布式的内存对象缓存系统,不少企业采用这个缓存项目来构建大负载的网站,来分担数据库的压力。memcached是通过在内存里维护一个统一...

2020-04-25 10:23:49 490

原创 Web后端学习笔记 Flask (12)Restful

Restful API规范restful API是用于在前端与后台进行通信的一套规范,使用这个规范可以让前后端开发变得更加轻松:1. 协议:http或者https2. 数据传输格式:json3. url链接:url链接中,不能有动词,只能有名词,并且对于一些名词,如果出现复数,就用复数的形式4. http请求方法:GET:在服务器上获取资源POST:在服务器上新创建一个...

2020-04-24 12:36:35 1106

原创 Web后端学习笔记 Flask(11)Local线程隔离对象

flask中的上下文:应用上下文和请求上下文1. 在flask中,是通过request对象获取用户提交的数据,但是在整个程序运行中,只有一个request对象。在实际应用场景中,会有多个用户同时进行数据提交。此时应该开多个子线程,或者协程进行处理(即有多个request独立对象)。在Flask中通过Local解决这一问题。只要绑定在Local对象上的属性,在每个线程中都是隔离的lo...

2020-04-23 09:09:59 716

原创 Web后端学习笔记 Flask(10)CSRF攻击原理

CSRF(Cross Site Request Forgery,跨站域请求伪造)是一种网络的攻击方式,它在2007年曾被列为互联网20大安全隐患之一。CSRF攻击的原理:网站是通过cookie实现登录功能的,而cookie只要存在浏览器中,那么浏览器在访问这个cookie所对应的网站的时候,就会自动的携带cookie信息到服务器上去。那么这时候就存在一个漏洞,如果你访问了一个病毒网站,那么...

2020-04-19 22:57:09 552

原创 Web后端学习笔记 Flask(9)cookie and session

Flask_wtf除了可以做表单验证,模板渲染之外,还可以防御CSRF攻击。要了解CSRF攻击的原理,首先需要了解cookie和session的知识点。cookie:在网站中,HTTP请求是无状态的,也就是说,即使第一次和服务器连接并且登陆成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是为了解决这个问题。第一次登陆后服务器返回一些数据cookie给...

2020-04-18 13:05:52 332 1

原创 Web后端学习笔记 Flask(8) WTForms 表单验证,文件上传

Flask-WTF是简化了WTForms操作的一个第三方库。WTForms表单的两个主要功能是验证用户提交数据的合法性以及渲染模板。同时还包含一些其他的功能。例如CSRF保护,文件上传等功能,安装flask-wtf也会默认安装WTForms,通过pip方式安装:pip install flask-wtf表单验证1. 自定义一个表单类,继承自wtform.Form类。2. 定义好需要...

2020-04-16 09:26:11 1372

原创 Web后端学习笔记 Flask(7)数据库

高级查询:1. group_by根据某个字段进行分组,比如说需要根据某个字段分组,来统计每组有多少人。2. havinghaving是对查询结果进一步过滤,比如只想看到未成年人的数量,那么首先可以对年龄进行分组统计人数,然后再对分组进行having过滤。3. join查询分为两种,一种是inner join, 另一种是outer join。默认的是inner join,如果指定...

2020-04-14 11:37:43 983

原创 Web后端学习笔记 Flask(6)数据库

SQLAlchemy一对一关系实现:在一对多的条件下:给Article表中添加article,只需要将article放入到user的article属性中,再将user添加到user表中即可,此时的article会自动添加到Article表中。# -*- coding: utf-8 -*-from sqlalchemy import create_engine, Column, Int...

2020-04-10 17:11:06 278

原创 Web后端学习笔记 Flask (5) 数据库

MySql数据库安装:省略SQLAlchemy介绍和基本使用:数据库是开发网站的基础,,在Flask中,支持的数据库有:MySql,PostgreSql,SQLite,Redis,MongoDB来写原生的语言实现功能,也可以使用高级别的数据库抽象方式,例如SQLAlchemy或者MongoEngine这样的ORM.除此之外,还需要在python中安装pymsql,以及SQLAlchem...

2020-04-09 12:19:11 745

原创 Web后端学习笔记 Flask(4)视图函数

Flask中的视图函数以及视图类:添加视图函数还可以通过下面的方式add_url_rule进行:app.add_url_rule(rule, endpoint, view_func):rule: 对应的urlendpoint:相当于给url取一个名字view_func:视图函数----------------------------------------------...

2020-04-08 11:04:34 655

原创 Web后端学习笔记Flask(3)模板 实例

豆瓣微信小程序:1.用到的知识:模板继承,宏

2020-04-07 13:41:38 253

原创 Web后端学习笔记Flask(2)模板

模板渲染:在flask中,视图函数可以直接通过render_template进行模板渲染。在flask中,模板文件是存放在template文件夹中:在调用模板文件的时候,模板文件的路径从template文件夹之后开始写,必须写完整的路径,在渲染模板的时候,默认是从项目的templates文件夹查找模板。from flask import Flask, render_templatea...

2020-04-06 14:48:23 426

原创 Web后端学习笔记 Flask(1)基础知识

基础的准备1. 使用的python版本 python3.62. pycharm编辑器3. 安装python虚拟环境:python中的虚拟环境:python中的虚拟环境相当于一个抽屉,在这个抽屉中安装的任何python包都不会影响到其他的抽屉。通过pip install virtualenv来安装python的虚拟环境,如果安装出现下面的错误(Read time out,就是...

2020-04-04 16:45:19 670

原创 Web前端Javascript笔记(8)Ajax前后端交互

认识Ajax 全名Asynchronous Javascript and XML(异步JavaScript和XML),节省用户操作时间,提高用户体验,减少数据请求,传输获取数据。Ajax相当于前后台数据交互的搬运工xml数据传输格式:优点:1. 种类丰富2. 传输量大缺点:1. 解析麻烦2. 不太适合轻量级数据json数据传输格式:(移动端)优点:1...

2020-04-01 14:07:47 207

原创 Web前端JavaScript笔记(7)ECMA6新增数组方法

新增数组方法:1. Array.from(): 将伪数组转化为真数组<script> window.onload = function () { let tag_li = document.getElementsByTagName("li"); alert(tag_li.length); ...

2020-03-31 13:52:01 166

原创 Web前端Javascript笔记(6)正则表达式

在web前端中,假设用户需要提交表单,在表单提交到服务器进一步处理之前,Javascript程序会检查表单,以确认用户输入的信息是符合规范要求的。这些工作可以使用正则表达式完成,正则表达式是一个描述字符模式的对象,ECMAscript的RegExp类表示正则表达式。在正则表达式中,定义了功能强大的【模式匹配】,【文本检索】,【替换】函数。正则表达式创建: ig忽略大小写和全...

2020-03-30 20:41:39 312

原创 Web前端JavaScript笔记(5)事件-拖拽

阻止默认行为和超链接在浏览器上运行网页后,右击会弹出菜单,这属于浏览器的默认行为。如何禁止这一默认行为:<script> window.onload = function () { document.oncontextmenu = function () { return false ...

2020-03-29 09:43:54 479

原创 Web前端Javascript笔记(5)事件

1. 什么是事件:事件是指发生并得到处理的操作JavaScript中的事件是由访问web页面的用户引起的一系列操作,例如,用户的点击操作,JavaScript中有两种事件模型:内联模型,脚本模型。内联模型:是一种传统简单的事件处理方法,在内联模型中,事件处理函数是HTML标签的一个属性,用于处理指定事件。特点:是和html代码混写在一起的。脚本模型:将事件绑定与HTML代码分离开来:...

2020-03-27 15:22:22 368

原创 Web前端JavaScript笔记(4)节点

如何获取元素节点的属性:在Web前端JavaScript笔记(3)对象中,介绍了访问行间属性的方法,除此之外,系统一共提供了三个方法访问元素的属性:1. setAttribute:2. getAttribute:3. removeAttribute:区别:1. class属性的访问,class与className的区别2. 行间的自定义属性,例如在 div中自定义...

2020-03-26 14:20:22 188

原创 Web前端JavaScript笔记(3)对象

在JavaScript中没有类这个概念,只有对象,在新ECMA6新版中增加了类的概念,和数组,字符串类似,对象的声明方法也有三种:1. 通过new运算符进行传件对象2. 省略new运算符创建对象3. 对象常量赋值<script> var obj1 = new Object(); var obj2 = Object(); ...

2020-03-25 13:38:28 213

原创 Web前端JavaScript笔记(2)字符串

字符串:字符串的声明方式:1. 通过new运算符声明字符串 // 声明的是对象2. 省略new运算符3. 字符串常量赋值<script> var str1 = new String(2323); var str2 = String(3234); var str3 = "4234"; a...

2020-03-24 12:54:06 226

空空如也

空空如也

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

TA关注的人

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