socket网络编程基础
套接字 socket是操作系统内核的一个数据结构,它是网络中节点进行相互通信的门户。网络编程实际上也可以称作套接字编程。
套接字有3种类型:
流式套接字,即TCP套接字,用SOCK_STREAM表示
数据报套接字,即UDP套接字(或称无连接套接字),用SOCK_DGRAM表示
原始套接字,用SOCK_RAM表示
本文主要分析TCP套接字和UDP套接字。
套接字地址结构由网络地址和端口号组成。
端口号概念在网络技术中,端口大致有两种意思:一是物理意义上的端口,比如ADSL Modem、集线器、交换机、路由器等用于连接其它网络设备的接口,如RJ-45端口、SC端口等。二是逻辑意义上的端口,一般指TCP/IP协议中的端口,端口范围从0~65535,比如浏览器网页服务(HTTP协议)的80端口,用于FTP服务的21端口等。端口号只有本地意义,即端口号是为了标识本地计算机的各个进程。
端口号分为两类,一类是由因特网指派名字和号码公司ICANN负责分配给一些常用的应用程序固定使用的”周知的端口“,其数值一般为0~1024,如:
应用程序的协议
周知的端口号
应用程序的协议
周知的端口 ...
进程间通信-IPC
本文主要介绍进程间通信(IPC,Inter Process Communication)的一些方式,包括:
管道(管道/匿名管道,命名管道/FIFO)
消息队列/报文队列
共享内存
信号量/信号灯
信号/软中断
套接字/socket
管道包括管道(Pipe)与命名管道(named pipe)。
管道/匿名管道管道(Pipe),也称匿名管道,是Linux下最常见的进程间通信的方式之一,它是在两个进程之间实现一个数据流通的通道。优点在于简单易用,缺点在于功能简单,有许多限制。
匿名管道在系统中是没有实名的,并不可以在文件系统中以任何方式看到该管道,它只是进程的一种资源,会随着进程的结束而被系统清除。
管道没有名字,所以也称为匿名管道
管道是半双工的,数据只能向一个方向流动。若要进行双向通信,需要建立两个管道
只能用于父子进程或兄弟进程等具有亲缘关系之间的进程通信
单独构成一种独立的文件系统。管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,并且只存在于内存中
数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次 ...
C++基础-静态库与动态库
静态链接库(*.lib)如果在程序中使用静态链接库,那么链接器在链接的过程中会将**.obj文件和.lib文件组织成可执行exe文件,也就是将.lib中的代码链接到可执行文件中,因此生成的exe文件比较大**。程序运行时,将全部数据加载到内存。如果程序体积较大,功能较为复杂,那么加载到内存中的时间就会比较长,最直接的一个例子就是双击打开一个软件,要很久才能看到界面。这是静态链接库的一个弊端。 但程序在发行时不需要提供库文件。
静态库优点总结
代码装载速度快,执行速度略比动态链接库快
程序在发行时不需要提供库文件,不存在兼容性问题
静态库缺点总结
使用静态链接生成的可执行文件体积较大,包含相同的公共代码,造成浪费
程序可扩展性差
动态链接库(*.dll)动态链接库又分为两种加载方式:隐式加载和显式加载
隐式加载隐式加载,也称载入时加载,是程序载入内存时加载所需的dll文件,且该dll随主进程始终占用内存。在编码时需要使用#pragma comment(lib,"myDll.lib")获得所需函数的入口。注意该.lib与静态链接库的.lib文件不同,静态链接库的.l ...
C++基础-STL简介
STL简介STL(Standard TemplateLibrary),即标准模板库,从根本上说,STL是一些“容器”的集合,这些“容器”有list、vector、set、map等,STL也是算法和其他一些组件的集合。STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。
STL包含了诸多在计算机科学领域里常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。从逻辑层次来看,在STL中体现了泛型化程序设计的思想(generic programming)。在这种思想里,大部分基本算法被抽象,被泛化,独立于与之对应的数据结构,用于以相同或相近的方式处理各种不同情形。
STL六大组件
容器(Containers):各种数据结构,如Vector,Deque,List,Set,Map,用来存放数据,STL容器是一种Class Template,就体积而言,这一部分很像冰山载海面的比率。
算法(Algorithms):各种常用算法,如Sort,Search,Copy,Erase,从实现的角度来看,STL算法是一种Function Te ...
TCP的三次握手与四次挥手
简介TCP提供面向有连接的通信传输,面向有连接是指在数据通信开始之前先做好通信两端之间的准备工作。
TCP在数据通信之前,通过TCP首部发送一个SYN包作为建立连接的请求等待确认应答(TCP中发送第一个SYN包的一方叫做客户端,接收这个的一方叫做服务端)。如果对端发来确认应答,则认为可以进行数据通信。如果对端的确认应答未能到达,就不会进行数据通信。此外,在通信结束时会进行断开连接的处理(FIN包)。
一个连接的建立与断开,正常过程至少需要来回发送7个包才能完成(建立一个TCP连接需要发送3个包,这个过程也称作“三次握手”,断开一个TCP连接需要发送4个包,这个过程也称作“四次挥手”)。
TCP报文段首部在具体理解三次握手与四次挥手的细节时,需要先了解一下TCP报文段的首部格式:
主要需要了解的是:
序号 seq
占4个字节,范围[0,223-1],共223(42 9496 7296)个序号。TCP是面向字节流的,在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。
确认号 ack
占4个字节,是期望收到对方下一个报文段的第一个数据字节的序号。
确认 ACK
...
TCP/IP基础
TCP/IP含义从字面意义上讲,有人可能会认为TCP/IP是指TCP与IP两种协议。实际生活当中有时也确实就是指这两种协议。然而在很多情况下,它只是利用IP进行通信时所必须用到的协议群的统称。具体来说,IP或ICMP、TCP或UDP、TELNET或FTP、以及HTTP等都属于TCP/IP的协议。它们与TCP或IP的关系紧密,是互联网必不可少的组成部分。
TCP/IP一词泛指这些协议,因此,有时也称TCP/IP为网际协议族(Internet Protocol Suite)。
互联网进行通信时,需要相应的网络协议,TCP/IP原本就是为使用互联网而开发制定的协议族。因此,互联网的协议就是TCP/IP,TCP/IP就是互联网的协议。
应用协议
HTTP(Hypertext Transfer Protocol)超文本传送协议
SMTP(Simple Mail Transfer Protocol)简单邮件传输协议
FTP(File Transfer Protocol)文件传输协议
TELNET(Telecom Munication Net Work Protocol)电信网络协议/远程登 ...
hexo生成的标签类别修改大小写问题
目前使用hexo框架的博客网站,每篇博客源文件(Mrakdown)定义好需要的 标签-tags 或 类别-categories 之后,会自动生成相应的文件夹。我之前在使用TensorFlow标签时,起初没有注意大小写,写成了tensorflow,自动生成标签类别并部署到GitHub后,想要将小写改成规范形式,就直接将相应博客源文件的标签改过来,改为的效果是网站可以显示改后的标签,但点击进去会进入404找不到页面。
原因在于自动生成的用于存放对应标签的html文件的文件夹名字没有改正过来(依然是全部小写),导致找不到对应路径上相应的html文件,可以在Github项目中看到文件名称并没有更新,应该是Git忽略了大小写。
回到hexo本地项目目录中,public文件夹就是推送到Github中的博客网站源码,不过注意在这里文件夹了不能进行Git操作,实际真正的Git管理目录是在.deploy_git文件夹中,它的内容和public文件夹中的一样,不过这里可以直接进行Git操作。
解决步骤如下 :
删除tags文件夹或categories文件夹中想要修改大小写的文件夹
使用Git命令提交 ...
OSI网络模型基础
网络模型的划分主要有3种方式:
OSI七层模型
TCP/IP四层模型
五层模型
OSI七层网络模型(Open System Interconnection,开放系统互连)称为开放式系统互联参考模型 ,是一个逻辑上的定义,一个规范,它把网络从逻辑上分为了7层。每一层都有相关、相对应的物理设备,比如路由器,交换机。OSI 七层模型是一种框架性的设计方法 ,建立七层模型的主要目的是为解决异种网络互连时所遇到的兼容性问题,其最主要的功能使就是帮助不同类型的主机实现数据传输。
TCP/IP四层概念模型的应用层整合了OSI参考模型的应用层,表示层,会话层,网络接口层整合了OSI的数据链路层和物理层,但作用不变。
所谓的五层协议的网络体系结构其实是为了方便学习计算机网络原理而采用的,综合了OSI七层模型和TCP/IP的四层模型而得到的五层模型。
OSI七层网络模型
TCP/IP四层概念模型
五层模型
对应网络协议
应用层(Application)
应用层
应用层
H ...
MarkDown额外语法-借助html语法
本篇介绍使用html语法在MarkDown中实现较复杂的功能,主要介绍以下几部分:
绘制复杂表格
……
绘制复杂表格首先在Excel中设计好需要的表格结构,如下图示例:
将Excel表格中设计好的表格复制到这里:No-Cruft Excel to HTML Table Converter,按照下图所示进行转换:
转换后的原始代码是这样的:·
1234567891011121314151617181920<table> <tr> <td>1</td> <td></td> <td></td> </tr> <tr> <td>2</td> <td>3</td> <td>4</td> </tr> <tr> <td></td> <td>5& ...
SQL基础(一)
SQL (Structured Query Language) 是具有数据操纵和数据定义等多种功能的数据库语言,这种语言具有交互性特点,能为用户提供极大的便利,数据库管理系统 DBMS(Database Management System)充分利用SQL语言以提高计算机应用系统的工作质量与效率。
DBMS种类主要通过数据的保存格式(数据库的种类)来进行分类,现阶段主要有以下 5 种类型。
层次数据库(Hierarchical Database,HDB)
关系数据库(Relational Database,RDB)
Oracle Database:甲骨文公司的RDBMS
SQL Server:微软公司的RDBMS
DB2:IBM公司的RDBMS
PostgreSQL:开源的RDBMS
MySQL:开源的RDBMS
面向对象数据库(Object Oriented Database,OODB)
XML数据库(XML Database,XMLDB)
键值存储系统(Key-Value Store,KVS)
SQL语句及其种类SQL 用关键字、表名、列名等组合而成的一条语句(SQL 语 ...