前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python网络编程

Python网络编程

作者头像
Dreamy.TZK
发布2020-04-09 14:27:35
2930
发布2020-04-09 14:27:35
举报
文章被收录于专栏:小康的自留地小康的自留地

基础理论知识

C/S 、B/S架构

架构名称

定义

优点

缺点

C/S

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

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

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

B/S

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

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

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

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

OSI七层.png
OSI七层.png

网络通信

单个客户端与服务端通信

服务端代码示例

代码语言:javascript
复制
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:服务端会处于阻塞状态,直至有客户端链接我,服务端代码才会向下执行。

客户端代码示例

代码语言:javascript
复制
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()
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-11-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基础理论知识
    • C/S 、B/S架构
    • 网络通信
      • 单个客户端与服务端通信
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档