TCP 远程执行CMD (解决粘包问题) 代码
服务端
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 (解决粘包问题) 代码的更多相关文章
- python 网络编程(远程执行命令与粘包)
远程执行命令 先来学习一个新模块 , 一会用到的.. 新模块: subprocess 执行系统命令 r = subprocess.Popen('ls',shell=True,stdout=subpro ...
- 网络编程之模拟ssh远程执行命令、粘包问题 、解决粘包问题
目录 模拟ssh远程执行命令 服务端 客户端 粘包问题 什么是粘包 TCP发送数据的四种情况 粘包的两种情况 解决粘包问题 struct模块 解决粘包问题 服务端 客户端 模拟ssh远程执行命令 服务 ...
- tcp粘包、解决粘包问题
目录 subproess模块 TCP粘包问题 粘包两种情况 解决粘包问题 struct模块的使用 使用struct模块解决粘包 优化解决粘包问题 上传大文件 服务端 客户端 UDP协议 upd套接字 ...
- python 之网络编程(基于TCP协议Socket通信的粘包问题及解决)
8.4 粘包问题 粘包问题发生的原因: 1.发送端需要等缓冲区满才发送出去,造成粘包(发送数据时间间隔很短,数据了很小,会合到一起,产生粘包),这样接收端,就难于分辨出来了,必须提供科学的拆包机制. ...
- 8-2udp和tcp网络编程以及粘包和解决粘包的方法
一 tcp网络编程 server 端 import socket sk=socket.socket() #实例化一个对象 sk.setsockopt(socket.SOL_SOCKET,socket ...
- TCP粘包问题的解决方案02——利用readline函数解决粘包问题
主要内容: 1.read,write 与 recv,send函数. recv函数只能用于套接口IO ssize_t recv(int sockfd,void * buff,size_t len,i ...
- Go语言网络通信---tcp上传大文件(粘包问题还需优雅解决)
server端: package main import ( "bufio" "encoding/binary" "fmt" "n ...
- python3全栈开发-什么是粘包、粘包现象、如何解决粘包
一.粘包现象 让我们基于tcp先制作一个远程执行命令的程序(1:执行错误命令 2:执行ls 3:执行ifconfig) 注意注意注意: res=subprocess.Popen(cmd.decode( ...
- python socket--TCP解决粘包的方法
1.为什么会出现粘包?? 让我们基于tcp先制作一个远程执行命令的程序(1:执行错误命令 2:执行ls 3:执行ifconfig) 注意注意注意: res=subprocess.Popen(cmd.d ...
随机推荐
- 收藏:FLASH中键检测与右键屏蔽
原文:http://space.flash8.net/space/?591172/viewspace-708726.html <!DOCTYPE html PUBLIC "-//W3C ...
- 在exe运行界面按右键(不用按鼠标右键)
单击该键 用于夜晚在exe运行界面粘贴数据.(正常来说直接按右键即可) 从此粘贴数据不会影响睡觉的人……etc.在宿舍……
- poj 1236(强连通分量分解模板题)
传送门 题意: N(2<N<100)个学校之间有单向的网络,每个学校得到一套软件后,可以通过单向网络向周边的学校传输. 问题1:初始至少需要向多少个学校发放软件,使得网络内所有的学校最终都 ...
- OpenCV 无法启动此程序,因为计算机中丢失opencv_core249.dll。请尝试重新安装改程序已解决此问题
换了64位的系统,配置好之后运行之前的程序,竟然给我抛出这个错误.应该是我的opencv没有安装对吧.系统报错 无法启动此程序,因为计算机中丢失opencv_core249.dll.请尝试重新安装改程 ...
- mybatis插入数据后返回自增的主键id
在插入数据时候想自动返回mysql的自增的主键,需要在mapper.xml中配置下: <insert id="insert" parameterType="com. ...
- printf 中的 %.*s
printf("message arrived %.*s\n", length, str); .*代表length 当 str 长度大于等于 length,打印出 str 前 le ...
- DoubleOps.java
/****************************************************************************** * Compilation: javac ...
- java代码示例(4—1(作业))
package com.java.union4; import static org.junit.Assert.*; import org.junit.Test; public class Demo ...
- P4994 终于结束的起点
P4994 终于结束的起点 现在,给你一个模数 M,请你求出最小的 n > 0,使得 \(\mathrm{fib}(n) \bmod M = 0, \mathrm{fib}(n + 1) \bm ...
- GO语言的进阶之路-网络编程之socket
GO语言的进阶之路-网络编程之socket 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是socket; 在说socket之前,我们要对两个概念要有所了解,就是IP和端口 ...