就决定是你了!IO多路复用!
可恶!这怎么办!还记得上一次,我们接触网络编程后出现的问题吗?我们当时写了一个简单的服务端,可以接收到客户端传输给我们的信息,但我们有一些问题没有解决,我们的服务端是一次性的,我们加上了while(1),但是,断开连接后又出现了问题,我们的服务器会一直进行接收动作,而且其他的客户端连接不上我们了,所以显然单纯的一个while是不可以的。可恶啊!这该怎么办?
一个线程一个客户端?单纯的加while已经是彻底失败了,现在我们的一个线程就能处理一个客户端连接,和消息的接收发送……嘶,那我们何不开多个线程呢?一个线程负责一个客户端,这不就好了嘛!咱说干就干:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657#include <stdio.h>#include <sys/socket.h>#include <sys/types.h>#include <netinet/in.h>#inclu ...
套接字编程?那是什么?
套接字编程?那是什么?这篇文章,我们来看看网络编程,一个合格的后端开发者,网络编程是他必经的一条道路,可能有的小伙伴接触过网络原理,知道OSI模型,TCP/IP模型等等,知道很多网络通信的流程,知道很多复杂的原理,虽然底层很复杂,但好在我们并不需要直接的去操作那些来进行网络通讯,已经有大佬为我们封装好了,我们只需要会使用封装好的接口就好了。实际上,网络编程就是围绕着socket也就是我们所说的套接字进行的。所以有的时候就会有人说,网络编程实际上就是套接字编程,从某些意义上也没啥问题。
文件描述符fd还记得那句经典的话吗?“Linux下一切皆文件”,Linux 系统中把一切都看做是文件,当进程打开现有文件或创建新文件时,内核向进程返回一个文件描述符,文件描述符就是内核为了高效管理已被打开的文件所创建的索引,用来指向被打开的文件,所有执行 I/O 操作的系统调用都会通过文件描述符。网络的连接也是一种I/O操作,所以我通过fd来进行一系列操作。
socket编程的流程无论是服务端还是客户端,都是通过socket进行连接然后通信的,但两方需要进行的事情并不相同,具体流程如下:
我们可以看到s ...
C/C++后端开发基础
前言这一篇作为C/C++后端开发的前导篇,讲述一些比较基本的东西,比如多线程、网络API、新特性、操作系统、计算机网络、数据结构等等,内容非常琐碎,但对于想涉足后端开发的小伙伴们来讲这些都常见到的,万字长文警告,建议搭配目录食用,话不多说,我们立上开始。
Linux这一块讲的是linux下一些必须要知道的知识
用户态和内核态C++接下来是C++的一些好用的工具,和一些琐碎的知识,建议搭配目录食用。
智能指针博主一直都认为C/C++有两大经典的特性,一个就是宏定义,另一个就是指针了,指针可以方便我们直接的访问地址,大大的提高了程序的性能,也给C/C++程序员更高的自由度,最常见的操作就是我们经常会用new(malloc)在堆上开辟一段空间,然后通过指针去管理它,虽然指针给我们带来了很多好处但同样指针也给我们带来了一定的问题,就好比刚才,带来自由度的同时,也增加了我们操作的复杂度,我们手动开辟空间后,也需要手动的去释放,但你知道的懒也是科技进步的一大原因,人们都知道一个类在销毁的时候会自动调用析构函数,那么我们只要在析构函数中销毁开辟的内存空间不就可以实现自动嘛,就这样智能指针诞生了。
使 ...
Linux下的C/C++程序设计
C++中的文件操作这一篇开始,我们正式的接触Linux下的C/C++开发,我们使用两个案例帮助大家,快速的掌握流程。
首先,我们来复习一下C++中对文件应该如何操作。在C++中有一个标准库叫fstream,它其中有三个类,分别是:
ofstream:该类表示输出文件流,用于创建文件并向文件中写入信息
ifstream:该类表示输入文件流,用于从文件读取信息
fstream:该类表示文件流,它同时具有ifstream和ofstream两种功能
要想在C++中对文件进行处理,那么我们就要同时将头文件fstream和iostream同时引入。
打开/关闭文件我们对文件操作,那我们必然是先打开文件,所以我们实例化一个对象,通过调用实例的open方法来打开一个文件,open含有两个参数一个是文件名,一个是打开模式。打开模式有以下几种:
ios::app:追加模式,所有的写入都将追加到文尾
ios::ate:文件打开后定位到文件尾部
ios::in:打开文件用来读取
ios::out:打开文件用来写入
ios::trunc:如果文件存在,其内容将在打开文件之前被截断,即把文件长度设为0
这 ...
Shell编程快速入门
权限的基本介绍我们使用ls -l(ll指令)指令的时候会发现有一串神秘的字符串,其实它就代表了文件的权限。它的每位都有特殊的含义。
我们来看看这9位字符都告诉了我们什么,首先是第0位,它确定了文件的类型,-表示普通文件,i相当于链接,相当于Windows的快捷方式,d是目录,相当于Windows的文件夹,c是字符设备文件,像是鼠标、键盘之类的,b是块设备,比如硬盘。其次1-3位确定所有者拥有该文件的权限,r代表可读,w代表可写,对于目录来讲代表可修改,x表示可执行,对于目录来讲就是可进入。在着4-6位确定所属组拥有该文件的权限。最后7-9确定其他用户拥有该文件的权限。在日期前面还有一些数字,这些数字代表文件大小,至于所有者前面的数字代表硬链接数目,一个文件至少一个,一个文件夹至少两个。在Linux中r可以用4代替,w可以用2代替,x可以用1代替,所以全部的权限可以用7代替。
修改权限chmod指令基本语法:
chmod u=rwx,g=rx,o=x 文件/目录名
chmod o+w 文件/目录名
chmod a-x 文件/目录名
其中u代表所有者,g代表所在组,o代表其他组,a代表所 ...
Linux中基本的指令
一切皆文件Linux讲究的是一切皆文件,在Windows下是文件的东西,在Linux中也是,在Windows下不是文件的东西,比如套接字,进程,甚至是硬件设备,在Linux下还是文件,你可以通过访问文件的方式来获取它们的信息,所以说要记住Linux下一切皆文件。
目录结构
Linux目录结构十分重要,要熟练的掌握。接下来我们来看一看这些目录都是用来做什么的:
/bin:bin是Binaries(二进制文件)的缩写,这个目录存放着最经常用的命令。
/sbin:s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。
/home:存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名。
/root:该目录为系统管理员,也称作超级权限者的用户主目录。
/lib:系统开机所需要最基本的动态连接共享库,就类似于Windows下的DLL文件。几乎所有的应用程序都需要用到这些共享库
/lost+found:这个目录是一个被隐藏的目录,一般情况下是空的,当系统 ...
Linux下的C/C++开发配置
前言从今天开始,我们开始学习如何在Linux下进行高性能的服务器开发,学习之前我们掌握基本的C/C++语法,配置好相关的环境,如果你觉得这些东西配置起来太过麻烦,没关系,博主会从头开始一步一步的配置,所以不必担心,旅途马上开始。
安装Linux系统首先我们进行最为基本的一步,在Windows系统下安装Linux系统,
首先我们要安装一个VMware,这里附上安装密匙:ZF3R0-FHED2-M80TY-8QYGC-NPKYF。我们来看具体操作:
1.取出VMware,安装在我们的电脑上,如果你直接安装成功可以去看第二步了,如果你没安装成功,可能是需要开启CPU虚拟化,开启虚拟化首先要根据你的电脑型号上网查找按哪个键进入BIOS,然后重启电脑,在重启的过程中狂按那个键,待进入BIOS界面后进入BIOS后,找到Configuration,选择Intel Virtual Technology(或AMD Virtual Technology)按回车,将光标移至Enabled,然后再回车,最后按F10保存并退出。
2.安装好VMware后,激活,我们要将光盘映像文件下载下来,这里我们使用的是Ub ...
计算机网络(二)
物理层的基本概念在了解过计算机网络的几个分层模型后,我们来分别了解一下这些层,这一篇我们先来了解一下物理层,在计算机网络中用来连接各种网络设备的传输媒体有很多,大致可以分为两类,导引型传输媒体和非导引型传输媒体。导引型传输媒体有双绞线、同轴电缆、光纤,非导引型传输媒体常常是微波通信。物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流,物理层会为上层的数据链路层提供透明的服务,为数据链路层屏蔽了各种传输媒体的差异,使数据链路层只需要考虑如何完成本层协议和服务,而不用考虑网络具体传输用到的媒体是什么。所以物理层协议的主要任务要解决四个问题:
指明接口所用接线器的形状和尺寸、引脚数目和排列、固定和锁定的装置
指明接口电缆的各条线上出现的电压的范围
指明某条线上出现的某一电平的电压表示何种意义
指明对于不同功能的各种可能事件的出现顺序
因为物理层用来传输的物理媒介众多,所以物理层的协议也很多,但每一个协议都包含上述四个问题的具体解决方案,所以我们要掌握的应该是一些基本概念,而不是某个具体的物理层协议。
传输方式物理层讲究的是如何将比特流在信道上进行传输,所以我们就来了解一下物 ...
计算机网络(一)
计算机网络的概念计算机网络是将一个分散的、具有独立功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统。说的直白点呢,就是我们可以理解为我们使用的电子设备,比如手机啊,电脑啊这类的东西,它们通过通信设备比如路由器,交换机,通过线路,信号等方式连接到了一起,这样我们就有了最基本的连接,也是实现网络的基础,之后我们可以通过一些软件,比如QQ,微信就可以和别人传输文件,聊天,也就是实现了资源共享和信息传递。所以我们说计算机网络是互联互通的、无主从关系的计算机集合。当然这句话说的也是有点遮遮掩掩的,所以我来为大家解释一下,互通互联就意思这些电子设备一定是相互连接到一起的,可能通过光纤,卫星信号等等方法,总之是连接到了一起。无主从关系的意思是虽然它们通过一种方式连接到了一起,但是它们并不会控制对方或者被对方控制,完全是一个独立的个体。
计算机网络的功能计算机网络有四大基本的功能:
数据通信:计算机网络可以实现数据的通信,比如我们经常会通过微信给别人传文件。
资源共享:资源共享又分为3类,分别是硬件资源共享,软件资源共享,数据资源共享,硬件资源共享可以体现在 ...
C++面向对象编程(一)
前言欢迎,各位来到C++面向对象编程的学习,相信各位已经学习过C语言,已经进入到了程序的世界,本课程要求一些c++的基础知识,比如控制流程,循环,指针,引用等等概念,如果清楚可以B站搜索黑马程序员的C++课程,本系列基于侯捷老师的C++课程,为大家讲解C++面向对象的一些知识,同时规范一下程序的书写,事不宜迟,我们马上开始!
面向过程?面向对象?相信各位,在学习C的过程中,一定已经动手写了很多程序了,我们通过写各种函数然后分析事物的指令步骤,依次调用相应的函数去解决问题,这样的操作有一个专有名词叫做面向过程编程,而面向对象编程,从过程中跳出来,将问题处理成转变成一个一个对象,通过对象去做一个行为进而解决问题。可能有的小伙伴还是有点晕,没关系我们举一个例子,写一个五子棋程序:
面向过程的设计思路就是首先分析问题的步骤:
1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。
面向对象的设计则是从事件中各个角色的行为出发来解决问题。
整个五子棋可以分为1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制 ...