服务端

 from socket import *
import subprocess,json,struct server= socket(AF_INET,SOCK_STREAM)
server.bind(('127.0.0.1',8081))
server.listen(5) while True:
client,client_addr=server.accept()
while True:
try:
cmd=client.recv(1024).decode('utf-8')
if not cmd:break
# 执行命令
obj=subprocess.Popen(cmd,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
# 显示正确和错误信息
stdout=obj.stdout.read()
stderr=obj.stderr.read()
print('执行结果长为%s' %(len(stdout)+len(stderr)))
# 制定报头
head_dic={'filename':'a.txt',
'md5':'rdgdgfdgfdgd',
'size':len(stdout)+len(stderr)
}
head_json=json.dumps(head_dic)
head_bytes=head_json.encode('utf-8')
# 发送报头长度
head_len=len(head_bytes)
head_len_bytes = struct.pack('i', head_len)
client.send(head_len_bytes)
# 发送报头
client.send(head_bytes)
# 发送真实数据
client.send(stdout)
client.send(stderr)
except ConnectionResetError:
print('客户端异常关闭')
break
client.close() server.close()

客户端

 from socket import *
import json,struct client= socket(AF_INET,SOCK_STREAM)
client.connect(('127.0.0.1',8081)) while True:
cmd=input('>>>').strip()
if not cmd:continue
client.send(cmd.encode('utf-8'))
# 先接受报头长度
head_len=struct.unpack('i',client.recv(4))[0]
# 接收报头
head_bytes=client.recv(head_len)
# 解析报头
head_json=head_bytes.decode('utf-8')
head_dic=json.loads(head_json)
print(head_json)
total_size=head_dic['size']
# 取出真实数据
recv_size=0
finnally_data=b''
while total_size>recv_size:
recv_data=client.recv(1024)
finnally_data+=recv_data
recv_size+=len(recv_data)
print(finnally_data.decode('gbk')) client.close()

TCP 远程执行CMD (解决粘包问题) 代码的更多相关文章

  1. python 网络编程(远程执行命令与粘包)

    远程执行命令 先来学习一个新模块 , 一会用到的.. 新模块: subprocess 执行系统命令 r = subprocess.Popen('ls',shell=True,stdout=subpro ...

  2. 网络编程之模拟ssh远程执行命令、粘包问题 、解决粘包问题

    目录 模拟ssh远程执行命令 服务端 客户端 粘包问题 什么是粘包 TCP发送数据的四种情况 粘包的两种情况 解决粘包问题 struct模块 解决粘包问题 服务端 客户端 模拟ssh远程执行命令 服务 ...

  3. tcp粘包、解决粘包问题

    目录 subproess模块 TCP粘包问题 粘包两种情况 解决粘包问题 struct模块的使用 使用struct模块解决粘包 优化解决粘包问题 上传大文件 服务端 客户端 UDP协议 upd套接字 ...

  4. python 之网络编程(基于TCP协议Socket通信的粘包问题及解决)

    8.4 粘包问题 粘包问题发生的原因: 1.发送端需要等缓冲区满才发送出去,造成粘包(发送数据时间间隔很短,数据了很小,会合到一起,产生粘包),这样接收端,就难于分辨出来了,必须提供科学的拆包机制. ...

  5. 8-2udp和tcp网络编程以及粘包和解决粘包的方法

    一  tcp网络编程 server 端 import socket sk=socket.socket() #实例化一个对象 sk.setsockopt(socket.SOL_SOCKET,socket ...

  6. TCP粘包问题的解决方案02——利用readline函数解决粘包问题

      主要内容: 1.read,write 与 recv,send函数. recv函数只能用于套接口IO ssize_t recv(int sockfd,void * buff,size_t len,i ...

  7. Go语言网络通信---tcp上传大文件(粘包问题还需优雅解决)

    server端: package main import ( "bufio" "encoding/binary" "fmt" "n ...

  8. python3全栈开发-什么是粘包、粘包现象、如何解决粘包

    一.粘包现象 让我们基于tcp先制作一个远程执行命令的程序(1:执行错误命令 2:执行ls 3:执行ifconfig) 注意注意注意: res=subprocess.Popen(cmd.decode( ...

  9. python socket--TCP解决粘包的方法

    1.为什么会出现粘包?? 让我们基于tcp先制作一个远程执行命令的程序(1:执行错误命令 2:执行ls 3:执行ifconfig) 注意注意注意: res=subprocess.Popen(cmd.d ...

随机推荐

  1. mysql.user表中Host为%的含义

    百度搜: MySQL之权限管理(mysql.user表详解) 连接:http://blog.csdn.net/zmx729618/article/details/78026497 mysql.user ...

  2. 查看windows下指定的端口是否开放

    有时候会出现ip  ping的通   但是就是连接不上的情况.这时候我们需要检测一下这个端口是否被开放 netstat -ano -p tcp | find >nul && ec ...

  3. Neural Networks and Deep Learning(week4)Building your Deep Neural Network: Step by Step

    Building your Deep Neural Network: Step by Step 你将使用下面函数来构建一个深层神经网络来实现图像分类. 使用像relu这的非线性单元来改进你的模型 构建 ...

  4. pip常用记录

    同电脑多版本python python2 -m pip install 包名(python2指向2.7的python.exe) 指定版本 pip install 包名==版本号 指定源 pip ins ...

  5. OGR中空间叠加函数Union

    在OGRLayer的对象中调用Union函数了.先看一下Union函数的原型: Union(OGRLayer *pLayerMethod, OGRLayer *pLayerResult, char * ...

  6. 启动与关闭comcat服务器

    1.找 comcat 安装目录 如 : E:\tomcat\apache-tomcat-7.0.64\bin 2.关闭comcat 服务 3.启动comcat服务

  7. C++使用目录

    VS2017的安装和配置 常用指令 C++ 数据类型   常量 运算符 数组 字符串  Ansi与Unicode  指针   模态与非模态对话框  变量的引用& new和delete动态分配和 ...

  8. Python装饰器实现异步回调

    def callback(func): def inner(obj, *args, **kwargs): res = func(obj, *args, **kwargs) if kwargs.get( ...

  9. PXC中的GTIDs

    基本环境:PXC 5.7.19 Row+Gtid,3节点 一.Galera GTID vs MySQL GTID 1.1.Galera GTID vs MySQL GTID Both kinds of ...

  10. python2的比较函数,cmp

    class Shu(object): def __init__(self,ss): self.ss = ss def __str__(self): return '(%s: %s)' % (self. ...