Python基础教程,第十五讲,网络编程(一)Socket详解

网络编程的重要性不低于数据库操作,而且两者通常是同时存在,比如用python写一个爬虫程序,最终抓取的数据保存入库,写了一个web项目,用户注册,登录,提交订单等数据最终也要保存到我们的数据库中,可见网络编程的重要性。所以我会拿出三讲的时间,分别介绍python中socket编程,爬虫和web服务器。 和大家一起理解网络编程。

学完此次课程,我能做什么?

学完此次课程,我们可以使用socket建立一个简易的socket服务器和socket客户端,并且可以进行通信。

学习此次课程,需要多久?

5-10分钟

课程内容

什么是socket?

socket翻译过来称为套接字,是一个基本的网络组件,过于详细的介绍大家可以百度一下,不在这里说了,只讲几个项目中的重点:socket提供长连接,建立两个点之间的信息通道;需要编写socket服务器端和socket应用端,可以理解为聊天程序的服务器和聊天程序的客户端。

为什么要使用socket?

想一下如何实现一个web聊天程序?如果没有websocket的相关知识,会不会很low的用ajax实现?每隔5秒请求一次服务器看有没有消息返回。这样做的缺点很明显:死循环,无限请求服务器,对服务器压力增大。实时性差,无法第一时间收到消息,需要等待下次循环。

看一下Ajax方式的示意图:

有了socket这个问题就可以迎刃而解,首先客户端与服务端建立长链接,服务器可以接受信息,也可以主动推送信息给已连接的客户端程序,而客户端可以主动发送给服务器信息,也可以被动的接受服务器的推送信息。

看一下Socket方式示意图:

很明显socket和http相比是长链接,双向通信,11点58分11秒客户端1给服务器发送了一条信息,服务器接收后立即推送给客户端2,客户端2通过接受方法,处理信息,显示给用户,优点是不是很明显?赶紧学习一下如何使用吧。

上面已经说过socket要编写服务端和客户端的程序,那我们先写一下用于监听的服务端:

注意点:

第一步:创建socket链接

s = socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)

AF_INET:使用ipv4的方式通讯,默认即可。

type:SOCK_STREAM 是 TCP方式, SOCK_DGRAM 是 UDP方式链接,关于tcp和udp的协议理解大家记住TCP数据传输可靠,效率低于UDP。相反UDP不确保数据是否传输成功,效率高。

第二步:bind()函数,绑定ip地址和端口号,linux下端口号小于1024的为系统保留,使用需要root权限,为了保证程序正常运行,最好使用1024以上的端口。

第三步:list()函数,设置允许排队等待链接的数量,由于accept为阻塞方法,所以要设置等待链接的数量,后面我们会讲如何解决阻塞。

第四步:接收信息,输出信息。

看一下客户端的代码:

客户端相对来说比较简单,创建链接后,使用connect()链接服务器即可。

看一下运行结果:

服务端打印出客户端发来的信息Hello,而客户端输出了 服务端返回的信息。

使用python实现一个socket服务器就是这么简单,其他功能也是在这个基础上来实现,无非是接受,转发,处理各类消息。

小结

今天我们学习了,Python中的socket,了解了如何建立一个socket服务器程序,以及客户端如何编写,了解了整体的流程,后期我们会在这个基础上结合python来实现一个聊天软件。

接下来学习什么?

接下来,我们会学习一下大名鼎鼎的爬虫,通过python如何快速实现一个简易爬虫。

关注,回复 Python基础 下载全部代码+PDF版电子书