网络(服务器客户端交互)

一.主流的服务器架构

1.B/S结构

B:Browser S:Server 浏览器/Web服务器

B->Http Request->S        注册(用户名,密码)

S->Http Response->B        注册是否成功

特点:非实时联网,只有在请求/应答过程中才会连接,弱联网

开心消消乐,全民飞机大战

PC页游,手机页游都是基于B/S结构。

B/S结构模拟C/S结构方法:WebSocket可以模拟C/S结构强联网。

2.C/S结构

C:Client S:Server 客户端/Socket服务器

C<-Socket(套接字) Connection->S        三次握手机制

C->Socket SendMessage->S

S->Socket SendMessage->C

特点:实时联网,任意时刻都在连接,强联网

绝地求生,王者荣耀

大型PC端游都是基于C/S结构。

C/S结构模拟B/S结构方法:WebAssembly可以模拟B/S结构弱联网。

 

二.通信协议

通信协议就是服务器客户端互相通信的规则。

国际化标准组织ISO提出了OSI(OpenSystemInterconnection开放系统互连)标准,就是著名的七层通信协议标准,基于这个标准可以实现任意两个系统间的通信。

1.七层协议的概念和每层的功能

2.TCP/IP,不是单纯的TCP和IP两个协议,而是包括了很多其他协议的一个网络协议集合,称为TCP/IP协议族

3.常用网络接口协议:都属于TCP/IP协议族

(1)IP协议:网间协议(Internet Protocol),负责主机间数据的路由和网络上数据的存储,是一个偏向较底层的协议。用户通常不涉及这一层。

(2)ARP协议:地址解析协议(Address Resolution Protocol),将网络地址映射到硬件地址。

(3)TCP协议:传送控制协议(Transmission Control Protocol),是一种提供给用户进程的可靠的面向连接的全双工字节流协议。绝大多数网络程序都使用的是TCP。

(4)UDP协议:用户数据报协议(User Datagram Protocol),是一种提供给用户进程的无连接协议。用于传输数据而不执行正确性检查。

(5)FTP协议:文件传输协议(File Transfer Protocol),是提供给用户以文件操作的方式与另外一台主机进行通信。

(6)TELNET协议:远程访问/控制(终端)协议(Telnet Terminal Protocol),允许用户以虚拟终端的方式访问远程主机。

(7)HTTP协议:超文本传输协议(Hypertext Transfer Protocol)。

 

网络(服务器客户端交互)

三.IP地址

1.IP地址的结构:32Bits = NetID(网络地址) + HostID(主机地址) = 8Bits + 8Bits + 8Bits + 8Bits

示例:10.10.12.165

2.IP地址的分类,总共分为5大类:

Class A: N + H + H + H                

Class B: N + N + H + H

Class C: N + N + N + H

Class D: 多播地址

Class E: 暂时未使用,保留

 

端口号:就是目标远程主机上的一个服务进程。IP标识了网络主机地址,端口号标识了访问网络主机上的哪一个进程服务。

 

四.Socket编程

1.什么是Socket?

Socket是一种进程通信机制,称为套接字,用于描述IP地址和端口号。

2.Socket的分类?

为了满足程序对通信质量和性能的不同,一般的网络都提供了3种不同的类型的Socket,分别如下:

 

网络游戏

       (1)流式套接字(SOCK_STREAM):提供了一种可靠的,面向连接的双向数据传输服务。实现了数据无差错,无重复的发送和接收,还可以提供流量控制功能,被传输的数据被看做是无记录边界的字节流。在TCP/IP协议族中,使用TCP协议实现字节流的传输。当需要发送大批量的数据并且对数据传输的可靠性有较高要求的时候应该使用流式套接字。

 

直播/视频

     (2)数据报套接字(SOCK_DGRAM):提供了一种无连接,不可靠的双向数据传输服务。数据以独立的包形式被发送,并且保留了记录边界,不提供可靠性保证。数据在传输过程中可能会丢失或重复,并且不能保证在接收端数据是严格按照发送的顺序接收的。在TCP/IP协议族中,使用UDP协议来实现数据报套接字。当对程序的效率有严格要求但又不需要严格保证质量的时候应考虑使用数据报套接字。

 

 

(3)原始套接字(SOCK_RAW):该套接字允许对较底层的协议(比如IP或ICMP)进行直接访问。一般用于对TCP/IP核心协议的网络编程。

 

3.端口号

端口号其实本质上就是运行在目标网络主机上的一个进程服务。

Http->80 FTP->21

4.使用TCP协议通信的工作流程

首先建立连接。TCP通过三次握手机制来建立两个端之间的连接。

第一次握手:建立连接的时候,客户端发送SYN包到服务器,等待服务器确认。

第二次握手:服务器收到SYN包,确认客户端请求,给客户端发送ACK回应包的同时也发送一个SYN包请求客户端确认收到回应。

第三次握手:客户端收到服务器发来的ACK回应和确认请求SYN,向服务器发送最终确认ACK,回应服务器自己已确认收到服务器的回应。

网络(服务器客户端交互)

使用Socket进行客户端服务器通信的基本步骤。

网络(服务器客户端交互)

 

 

 

 

 

(1)Server端流程:

网络(服务器客户端交互)

 

网络(服务器客户端交互)

第一步:创建监听Socket

第二步:IP+端口创建EndPoint对象

第三步:使用Socket.Bind()绑定EndPoint

第四步:使用Socket.Listen()开始监听

网络(服务器客户端交互)

第五步:使用Socket.Accept()方法接收客户端的连接并创建一个新的用于和客户端通信的Socket

网络(服务器客户端交互)

第六步:使用Socket.Send()方法向客户端发送消息

网络(服务器客户端交互)

第七步:使用Socket.Receive()方法接收客户端发来的消息

网络(服务器客户端交互)

第八步:通信结束后关闭Socket

网络(服务器客户端交互)

 

 

(2)Client端流程:

网络(服务器客户端交互)

网络(服务器客户端交互)

 

第一步:创建Socket对象

第二步:IP+端口创建EndPoint对象

第三步:使用Socket.Connect()方法以及上面的EndPoint对象作为参数,向服务器发出连接请求

第四步:如果成功,使用Socket.Send()方法发送消息

网络(服务器客户端交互)

第五步:使用Socket.Receive()方法接收服务器发来的消息

网络(服务器客户端交互)

第六步:通信结束后关闭Socket

网络(服务器客户端交互)