远程执行命令&黏包拆包

import subprocess


# r = os.popen('pwd')
r = os.popen('cmd') # 命令错误直接抛异常
print('11', r.read())


# shell = True 当成系统命令执行; stdout=subprocess.PIPE 获取命令执行结果; stderr=subprocess.PIPE 获取错误信息
r = subprocess.Popen('cmd', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# r = subprocess.Popen('pwd', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print('22', r.stdout.read().decode('utf-8')) # 正确结果,读完后关闭
print('33', r.stderr.read().decode('utf-8')) # 错误结果,读完后关闭


#黏包、拆包,是网络传输的一种问题
# 1. 黏包:多个包拼接成一个包
# 2. 拆包:一个包拆成多个包

# 黏包产生原因:
TCP协议特性:TCP是面向流的协议,数据像水流一样连续传输,没有明确的包边界
Nagle算法:为了提高网络利用率,TCP会将小的数据包合并发送
接收方处理不及时:接收方未能及时读取数据,导致多个包堆积在一起

# 拆包产生原因:
MTU限制:网络传输有最大传输单元限制,超过MTU的数据包会被分割
网络设备处理:路由器、交换机等网络设备可能对大数据包进行分片
网络拥塞:网络状况不佳时,大数据包可能被拆分传输

#解决办法:
固定数据包长度:发送固定长度的数据,接收方按固定长度读取
添加包头:在数据包前添加长度信息,接收方根据长度信息解析数据
特殊分隔符:使用特殊字符或字符串作为包的分隔符

 

posted @ 2025-08-26 20:53  尐少  阅读(6)  评论(0)    收藏  举报