1.前言
前面几个章节我们大致过了一遍MFC的内容,相信现在的你已经有能力开发一些简单的软件!
但现在的软件,很少有不需要网络的,别的不说,至少也会有一个软件检测升级的功能。
而这就是本章要介绍的网络编程!
不过在学习网路编程之前,我们需要有一个总体观念:
网络通信是对于整个电脑而言,而不单单是我们写的这个程序,我们所写的程序实际上是在调用我们电脑网络通信的能力。
2.网络编程基础
首先还是来考虑一个问题,我们为什么需要网络?
这个问题应该是很简单的,因为我们需要和他人交换信息,通信。
虽然目前大部分电脑的操作系统本身,都是支持多用户使用同一台电脑,但实际上,现在个人电脑应该是占主导地位的,即自己独占一台电脑。
Windows
系统也是一样,你可以在电脑上建立多个用户,且这多个用户可以互相不影响,只是大部分人不会这么做而已。
也就是说,如果我想要和朋友通信,或者从别人的网站上下载资料,就只需要让我的电脑和它的电脑通信即可,即两台电脑互相通信。
但问题来了,通信肯定需要介质来传输信息,就算是我们说话,那也需要用空气传递声波别人才能听到!
而电脑之间的传输介质就很多了,比如无线Wifi,网线、光纤等等。
虽然介质很多,但对于我们而言,可以直接抽象一下,即两个电脑之间可以直接看作是有一根线将它们连接了起来。
因为我们不需要关心各个电脑之间是用什么传输的,我们只需要知道它们能够传输信息。
graph LR
A[电脑]--- B[电脑]
但这只是最简化的想法,因为现实中不可能给每个电脑或手机都拉一根线。
因为当前世界的电子产品数量大的惊人,所以很多时候,很多电脑都是共用一根线来节约成本的。
graph LR
A[电脑1]--- C[公共线路]
C---B[电脑2]
A1[电脑3]---C
C---B1[电脑4]
但这时候就出现问题了,即一个电脑发送的消息,如何判断它能够准确的发送到目的计算机上呢?
因为此时大家都共用一根线传输数据,你得区分各个电脑才知道数据应该发给谁。
所以这时候就有了地址,每个连上了网的电脑都会被分配一个地址,即我们常说的IP地址:
graph LR
A[电脑1 : 192.168.0.1]--- C[公共线路]
C---B[电脑2: 192.168.0.2]
A1[电脑3: 192.168.0.3]---C
C---B1[电脑4: 192.168.0.4]
当然,上面这些地址都是我随意写的,理解一下即可。
此时一个电脑想要发送信息,就只需要在信息前面添加一个IP地址,然后将这个信息发送到共有线路上。
如果接收方看到这个信息的接收地址是自己,那就接收,不是自己的话,要么转发,要么直接丢弃。
比如上图中,如果电脑1想要给电脑4发送一条消息,那么就会在这条信息前面添加上目的地的IP地址,即192.168.0.4
。
但这条信息会发送到这条线路上的每一个电脑,当电脑2,电脑3看到这条信息目的地IP不是自己,就丢弃了,而电脑4看到这个IP地址就是自己的地址,才会接收这个信息。
上面这种通过给每个电脑都分配IP的方法,是最开始的设想,它被称为IPv4
。
但后来,谁也没想到世界的电子设备迅速增长,IP地址不够用了!
因为IPv4
是用的32
位二进制表示的地址,即可以表示 232 个地址,虽然实际上要比这个数小,但也大约可以有43
亿个设备。
可现在世界上的人口都有七八十亿了,这肯定是不够的!
所以后来就出现了Ipv6
地址,用64位来表示,据说其数量之大,就算给地球上每粒沙子都分配一个ip地址也是绰绰有余的。
但由于Ipv4
的基础设施已经搭建好了,想要迅速过渡到Ipv6
,就意味着需要大量更换基础设施,这样成本太高了。
所以为了正常过渡到Ipv6
,同时不影响现在使用,就出现了局域网!仅仅使用Ipv4
就能基本满足现在的需求。
专业点来说叫做NAT机制,除此之外还有动态分配机制等等技术来解决这一问题。
如果你现在电脑连的Wifi
上网,那么就已经身处局域网之内了。
局域网的概念就是,不用每一个电脑都连上公网,只需要一个设备连接上公网,比如路由器,而其它设备连接路由器即可: