subprocess模块
- 可以帮你通过代码执行操作系统的终端命令
- 并返回终端执行命令后的结果
粘包问题
服务端第一次发送的数据,客户端无法精确的一次性接收完;下一次发送的数据与上一次未接收完的数据粘在一起了,就是粘包.
- 无法预测对方需要接收的数据的大小长度
- 多次连续发送数据量小,并且时间间隔较短的数据一次性打包发送
TCP协议特性
tcp是一个流式协议,会将多次连续发送数据量小,并且时间间隔短的数据一次性打包发送.
解决粘包问题
struct模块
是一个可以将很长的数据的长度,压缩成固定的长度的一个标记(数据报头)
必须先报头,发送报头,在发送真实数据
既要发文件,又要发文件的描述信息
1.客户端发送字典给服务端
send_dic = {
file_name:文件名
file_size:文件的真实长度
}
2.通过json模块序列化成bytes数据
json_data = json.dumps(send_dic)
bytes_data = json_data.encode("utf-8") #bytes文件
3.先获取字典的报头
`headers = struct.pack('i' , len(bytes_data))`
4.服务端收到字典,并接收到文件的真实数据
上传大文件
客户端往服务端上传大文件
UDP
UDP是一种传输协议
- 不需要建立双向通道
- 不会粘包
- 客户端给服务端发送数据,不需要等待服务端返回接收成功
- 数据容易丢失,数据不安全
TCP
就好比打电话
UDP
就好比发短信
SocketServer
python内置模块,可以简化socket套接字服务端的代码
简化TCP与UDP服务端的代码
必须要创建一个类