网络编程常用模块及方法
Socket模块
-
什么是socket
socket是一个模块,可以写一套C/S架构的套接字
-
为什么要用socket
socket套接字会把底层各层协议工作封装好,可以节省开发成本
-
Python中的使用
内置模块 import socket
注意:
客户端与服务端必须遵循:一端发,一端收
半连接池:
socketobj.listen(3) 3表示可以等待3个客户端的接入,加上正在服务对象,一共可以支持4个服务
subprocess模块
可以通过代码来执行操作系统终端的命令
返回终端执行命令后的结果
struct模块
引发粘包问题
1.由于网络传输过程中,无法预测对方需要接收的数据长度大小导致前后两次发送数据粘在一起
2.多次连续发送数据量小,并且时间间隔短的数据一次性打包发送
解决粘包问题
1.先将源文件打包为报头,以4字节为标准位传输给客户端,使用struct.pack的方式将文件打包为报文
2.发送报头,
3.发送真实数据
常用方法:
struct.pack('i',len(文件)) 返回字符串,按照给定格式i把数据转换成字符串(字节流),并返回该字符串
struct.unpack('i',接收到的字符串) 返回元组,按照给定格式'i'把数据流解析,返回解析结果
struct_server模块
可简化TCP与UDP服务端代码
必须要创建一个类
必须重写一个handle方法,覆盖原有的handle方法,当客户端链接时,会调用该方法
socketserver.TCPServer只能同时服务一个客户端