Socket基础
生活场景简单理解Socket
Socket是负责使两台计算机中的应用程序之间通信用的,我们可以将这个通信过程类比到我们生活中拨打座机电话进行沟通的过程。
我们首先回想下现实生活中两个人拨打电话的场景,首先需要有两位沟通者,这里可以称为呼叫者和被呼叫者。有了两位沟通对象后,则双方沟通地点需要电信插座和电话。在双方沟通之前大家需要提前约定好使用说明语言进行沟通,不然一个说英语另一方说日语那么会导致无法进行信息的表达。有了电话和电信的插座,我们需要将电话线插到电信插座中,这样才能进行通信,另外在正式进行拨号之前,呼叫者必须知道被呼叫者的电话号码。
例图:
通过以上的场景我们将融入到Socket通信的场景中进行类比。首先两位沟通者就相当于客户端和服务器,进行沟通的设备“电话”就相当于客户端和服务器中的两个应用程序,例如浏览器和百度网站。
关于使用电话通常需要插入到电信的插座中才能通信,那么这里两个应用程序之间需要通信也同样需要“插座”,这里的“插座”就相当于我们的Socket,就像引擎一样驱动电话传递信号进行通信。
在电话场景中提到双方需要协商好进行电话沟通的语言,那么此场景放到Socket通信中则就称之为“协议”,例如我们通过浏览器访问百度网站,两则之间都是通过HTTP协议进行信息的传达的。
在电话沟通前拨通的电话号码,就相当于客户端浏览器通过IP或域名访问到服务器中具体的应用程序,这里的IP或域名就相当于电话号码,这里需要注意的一点是,IP或域名只是找到对应服务器,而Socket还需要根据端口号在服务器中找到指定的应用。
例图:
一个生活中电话沟通场景的例子就完全可以简单的理解下Socket通信的一个过程和作用。所以说,不光是艺术源于生活,计算机中的很多概念知识都可以从生活场景中获取灵感。
Socket主要类型
流式套接字
流式套接字是使用TCP协议,是面向连接的数据传输服务。根据TCP协议该套接字具备如下的特点:需要进行3次握手,输出数据安全但效率低。
数据报套接字
数据报套接字使用UDP协议,是无连接的数据传输服务。根据UDP协议该套接字具备如下特点:传输数据不可靠容易丢失,但是传输速度快。
Socket在服务器和客户端中的应用模式
通常在服务器和客户端之间要进行通信,至少要包含三个Socket。其中一个运行在客户端,还有两个运行在服务器。
服务端负责监听的Socket
Socket一直处于等待状态,实时监控客户端发送连接请求。监听并不定位某个具体的客户端,只要是客户端请求的IP和端口号,在Socket监听范围内的都会被监听到,从而建立连接。
客户端Socket
用于向服务器的Socket发送连接请求,发送连接请求前客户端必须要描述出连接方的IP地址和端口号。
服务器通信Socket
在服务器监听到客户端发送的连接请求后,就会创建用于与客户端进行通信的Socket。
使用Socket实现客户端和服务端通信的基本流程
该图是以代码的编写的维度进行绘制,以便在后期使用到时进行回顾。
实战案例
1.使用Socket实现WEB服务器(类似于IIS);
2.使用Socket实现客户端和服务端的聊天通信;
案例源码地址:https://github.com/JiangChengXuan/AppCase.git