Python网络编程
基础理论知识
C/S 、B/S架构
架构名称 | 定义 | 优点 | 缺点 |
---|---|---|---|
C/S | 基于客户端与用户端之间的架构 | 界面和操作丰富,安全性容易保证,响应速度快 | 需要开发两套程序,开发维护成本高,兼容性差 |
B/S | 基于C/S架构的一种特殊的C/S架构,浏览器与服务端之间的架构。 | 分布性强,客户端几乎不需要维护,开发简单,共享性强,维护简单方便 | 个性化低,安全性及响应速度需要花费巨大设计成本 |
CS响应速度快,安全性强,一般应用于局域网中,但是开发维护成本高;BS可以实现跨平台,客户端零维护,但是个性化能力低,响应速度较慢。所以有些单位日常办公应用BS,在实际生产中使用CS结构。
网络通信
单个客户端与服务端通信
服务端代码示例
1 | import socket |
socket.AF_INET
:基于网络的socket套接字。
socket.SOCK_STREAM
:基于TCP协议的socket套接字。
phone.listen
:这个知识点有一些不容易理解,服务端开启之后,等待客户端连接,listen做了一个客户端数量的限定,listen(n)只有n+1的客户端可以连接上我的服务端,但是连接上之后,只有第一个客户端可以与服务端进行互相通信,其他的n个客户端已经成功建立链接但是需要等待第一个客户端结束之后,逐一进行通信,通信之前的状态都是阻塞状态;n+1以外的客户端虽然也是阻塞,但是是连链接都建立不成的,就是单纯的阻塞。只有第一客户端结束之后,剩余的才可以逐一建立链接等待。这个其实与服务端开启的半链接池相关,什么叫半链接池?服务端开启之后,只要有客户端链接我,理论上来说都可以与我建立链接的,但是只要建立链接,在我服务端就会占有一定的内存,暂存这些链接数据,试想一下,如果1000万个链接进入我的服务端的内存,这样会极大的浪费内存资源,所以服务端设置一个半链接池,只允许n+1个客户端与我服务端建立链接,剩下的客户端也是处于阻塞状态,但是不会进入我的内存,这样可以控制客户端的数量,节省内存。
accept
:服务端会处于阻塞状态,直至有客户端链接我,服务端代码才会向下执行。
客户端代码示例
1 | import socket |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小康博客!
评论
TwikooWaline