'''
网络编程:
1. 网络分层
2. C/S和B/S架构
3. Socket + TCP/UDP
4. TCP粘包
5. 基于TCP实现验证
6. 多线程Socket
''' # 综述
'''
1. 网络结构:
/*OSI七层*/ /*TCP/IP五层*/ /*TCP/IP四层*/ 协议
应用层
表示层 ------ 应用层 ---- 应用层 HTTP, FTP, DNS
会话层
/*************** Socket **********************/
传输层 ------ 传输层 ---- 传输层 TCP/UDP
网络层 ------ 网路层 ---- 网路层 IP
数据链路层 ---- 数据链路层 ---- 网络接口层 ARP
物理层 ------ 物理层
2. Socket分类:
AF_UNIX # 文件socket
AF_INET # 网络socket
3. 程序的唯一标识: IP_PORT = ('ip_port',port)
''' # 网络分层, socket分类, 程序的唯一标识
'''
C/S和B/S架构:
1. C/S: Client and Server
#1. 两层架构
#2. 客户端需要实现绝大多少的业务逻辑和界面展示
#3. 服务器端实现与数据库交互
优点:
#1. 交互只有一层, 响应速度快
#2. 客户端操作丰富
#3. 安全性好
缺点:
#1. 用户群窄, 需要安装客户端
#2. 维护成本高, 发生一次升级, 所有客户端要更新
2. B/S: Browser and Server
#1. Browser, Server和DataBase构成三层架构
#2. 事务主要在后端处理, 前端负责呈现
优点:
#1. 客户端无需安装, 浏览器就行了
#2. 用户群广
#3. 升级服务器就行了
缺点:
#1. 跨浏览器的兼容问题
#2. 响应速度和安全问题
''' # C/S和B/S架构
'''
TCP/IP: 面向连接
1. 流程
/*Server*/ /*Client*/
tcp_server = socket(AF_INET,STREAM) tcp_client = socket(AF_INET,STREAM)
tcp_server.bind(IP_PORT) tcp_client.connect_ex(IP_PORT)
tcp_server.listen(num)
---- 准备 --------------
conn, addr = tcp_server.accept()
---- 监听, 有用户接入则建立连接----- ------- 客服端接入 ---------------
conn.recv(BUFSIZE) tcp_client.send(b'msg')
conn.send(b'msg') tcp_client.recv(BUFSIZE)
---- 读取或者发送消息 ------------ -------- 发送或读取消息 -----------
conn.close() tcp_client.close()
---- 服务器断开连接 ----------- ------ 客户端断开连接 -------------
tcp.server.close()
---- 服务器关闭 --------------
2. 注意:
1>服务器端有两次阻塞:
1) tcp_server.accept() # 等待客户端接入, 没有则程序卡住;
# 有多个连接接入时, 则将其余存入缓存区, 等当前连接处理完断开后, 再处理下一个连接
转载于:https://www.cnblogs.com/lancelotxly/p/10837803.html