socket、tcp/ip协议、udp协议

socket一般也称做"套接字",用于描述IP地址和端口,是一个通讯链的句柄,应用程序一般经过"套接字"向网络发出请求或者应答网络请求。web

socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操做。 socket就是该模式的一个实现,socket是一种特殊的文件,一些socket函数就是对其进行的操做(打开、读/写IO、关闭)。django

socket和file的区别:flask

文件是都是在同一台计算机上,两个进程之间传输数据。小程序

socket能够实如今不一样的计算机之间传输数据,也就是网络传输数据。好比说qq、打开一个网页,这些都是socket来实现通讯的。sublime-text

那网络通讯呢又要说到tcp/ip协议和udp协议,socket里面已经封装好了upd和tcp/ip协议,直接使用就能够了。安全

简单说下tcp/ip协议是干吗的,网络刚出来的时候,一片混乱,那要传输数据就得你们都遵照一个规则,你们都按照这个,而后就出现了tcp/ip协议。也许你听过3次握手,4次断开,说的就是tcp/ip链接的一个过程。加入a计算机要和b计算机通讯,过程是这样的服务器

a:在吗,我能够连你吗
b:在,你连吧
a:好的,我要给你发数据了网络

#这就是3次握手,这就创建好通道了,两台计算机就能够进行通行了。多线程

那么4次断开是什么呢框架

a:我要和你断开了
b:好的,你断开吧
b:关闭通道
a:关闭通道

为何关闭2次呢,由于两端要互相传数据,挖了两条路,一条路用来b给a传数据,另一条是a给b传数据,因此是2次关闭,各自关闭各自的通道。这两条路呢,就有个次叫全双工,就是两边均可以互相发送数据,若是只有一端能够发送数据,那就叫单工。

下面这个图,就能够看到创建链接的过程和传输数据的过程,以及断开的过程。

 

而udp协议就比较简单了,没有那么复杂的断开和链接,不须要3次握手,不须要肯定客户端、服务端是否能收到,tcp/ip是必须创建好链接以后,才能发数据,而udp是无链接的,知道ip和端口号直接就是发,它比tcp/ip快,可是不安全。

upd就像写信同样,有可能在路上就没有了,对方没有收到。而tcp/ip就像打电话同样,必须得接通才能说话。

下面是udp server端的代码:

下面是client端的代码

先运行server端的代码再运行client的向server端发送数据,server端再返回数据,作一个简单的聊天的小程序,结果以下

 

下面是tcp/ip协议的代码,server端代码:

 

#下面是客户端链接服务端的代码

 

你们可能会想,学这个有啥用呢,其实这些web框架底层就是这么实现的,好比说django、flask这些,会了socket,咱们也能够本身开发一个web框架。固然如今只能一次给一个客户端服务,用了多线程或者多进程就能够为多个客户端来服务了。

服务端运行结果

下面用多线程,每次有客户端连过来就启动一个线程来服务,这样就能够为多个客户端服务了,用threading模块启动一个线程,来一个请求就启动一个线程为他服务,代码以下:

 

相关文章
相关标签/搜索