您的位置 首页 > 腾讯云社区

Python网络编程---Dreamy.TZK

基础理论知识 C/S 、B/S架构

架构名称

定义

优点

缺点

C/S

基于客户端与用户端之间的架构

界面和操作丰富,安全性容易保证,响应速度快

需要开发两套程序,开发维护成本高,兼容性差

B/S

基于C/S架构的一种特殊的C/S架构,浏览器与服务端之间的架构。

分布性强,客户端几乎不需要维护,开发简单,共享性强,维护简单方便

个性化低,安全性及响应速度需要花费巨大设计成本

CS响应速度快,安全性强,一般应用于局域网中,但是开发维护成本高;BS可以实现跨平台,客户端零维护,但是个性化能力低,响应速度较慢。所以有些单位日常办公应用BS,在实际生产中使用CS结构。

网络通信 单个客户端与服务端通信

服务端代码示例

import socket # 1. 创建socket对象(买电话) phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 参数可以默认不写 # 2. 绑定IP地址和端口 # 安装电话卡 phone.bind(('127.0.0.1',8848)) # 3. 监听(开机) phone.listen(5) # 4. 等待电话连接(等别人给你打电话) print('start...') conn,client_addr = phone.accept() # 此时运行就会一直阻塞住。 print('连接来了:',conn,client_addr) # 5. 接受消息 msg = conn.recv(1024) # 每次至多读取1024个字节 print('客户端的消息:',msg) conn.send(msg.upper()) # 6. 关闭连接 conn.close() # 7. 关机 phone.close()

socket.AF_INET:基于网络的socket套接字。 socket.SOCK_STREAM:基于TCP协议的socket套接字。 phone.listen:这个知识点有一些不容易理解,服务端开启之后,等待客户端连接,listen做了一个客户端数量的限定,listen(n)只有n+1的客户端可以连接上我的服务端,但是连接上之后,只有第一个客户端可以与服务端进行互相通信,其他的n个客户端已经成功建立链接但是需要等待第一个客户端结束之后,逐一进行通信,通信之前的状态都是阻塞状态;n+1以外的客户端虽然也是阻塞,但是是连链接都建立不成的,就是单纯的阻塞。只有第一客户端结束之后,剩余的才可以逐一建立链接等待。这个其实与服务端开启的半链接池相关,什么叫半链接池?服务端开启之后,只要有客户端链接我,理论上来说都可以与我建立链接的,但是只要建立链接,在我服务端就会占有一定的内存,暂存这些链接数据,试想一下,如果1000万个链接进入我的服务端的内存,这样会极大的浪费内存资源,所以服务端设置一个半链接池,只允许n+1个客户端与我服务端建立链接,剩下的客户端也是处于阻塞状态,但是不会进入我的内存,这样可以控制客户端的数量,节省内存。 accept:服务端会处于阻塞状态,直至有客户端链接我,服务端代码才会向下执行。

客户端代码示例

import socket # 1. 创建socket对象(买电话) phone = socket.socket() # 2. 与服务端建立链接 phone.connect(('127.0.0.1',8848)) # 3. 发消息 phone.send('hello'.encode('utf-8')) from_server_data = phone.recv(1024) print(from_server_data) phone.close() ---来自腾讯云社区的---Dreamy.TZK

关于作者: 瞎采新闻

这里可以显示个人介绍!这里可以显示个人介绍!

热门文章

留言与评论(共有 0 条评论)
   
验证码: