from socket import *  #导入套接字模块的所有命令
import subprocess #导入subprocess模块,用于执行命令行
import struct #导入struck模块,用于封装数据流长度 ip_prot = ('192.168.55.1',8000) #创建ip地址和端口号
back_log = 5 #创建监听链接数
buffer_size = 1024 #创建可接收字节数 tcp_Server = socket(AF_INET,SOCK_STREAM) #创建服务器套接字:AF_INET--IP4协议 SOCK_STREAM--流式传输
tcp_Server.bind(ip_prot) #绑定服务端端口号
tcp_Server.listen(back_log) #创建监听链接
while True: #创建服务端大循环机制
coon,addr = tcp_Server.accept() #准备接收数据,coon:接收的数据;addr:接收客户端地址
print('检测到在途的链接打击:',addr) #打印接收的客户端地址
while True: #内部逻辑小循环
try: #捕捉可能发生的异常,防止程序崩溃
cmd = coon.recv(buffer_size) #按照buffer_size的字节大小接收服务端数据
if not cmd :break #如果数据不为空(即接收到数据信息)
print('收到来自客户端%s的命令%s'%(addr,cmd)) #打印客户端的地址及命令内容
# ——————————————————————#
#以下内容暂未理解,后续更新中...
res = subprocess.Popen(cmd.decode('utf-8'),shell=True, #将客户端的缓存信息取出放入命令解释器??
stderr=subprocess.PIPE,
stdout=subprocess.PIPE,
stdin=subprocess.PIPE,)
err = res.stderr.read()
if err:
cmd_res = err
else:
cmd_res = res.stdout.read() if not cmd_res:
cmd_res = '执行成功'.encode('gbk')
#以上内容暂未理解,后续更新中...
#——————————————————————#
length = len(cmd_res) #设置执行命令后的长度
data_length = struct.pack('i',length) #设置数据长度,并打包
coon.send(data_length) #发送数据长度
coon.send(cmd_res) #发送命令执行输出
except Exception as e: #捕捉异常产生的异常值
print('当前发生的错误是%s'%e) #打印异常值
break #一旦产生异常就终止程序

粘包解决高端_Server的更多相关文章

  1. 粘包解决高端_Client

    from socket import * #导入套接字模块的所有命令import struct #导入struck模块,用于封装数据流长度# from functools import partial ...

  2. Python socket粘包解决

    socket粘包: socket 交互send时,连续处理多个send时会出现粘包,soket会把两条send作为一条send强制发送,会粘在一起. send发送会根据recv定义的数值发送一个固定的 ...

  3. Python进阶----粘包,解决粘包(旗舰版)

    Python进阶----粘包,解决粘包(旗舰版) 一丶粘包 只有TCP有粘包现象,UDP永远不会粘包 什么是粘包     存在于客户端接收数据时,不能一次性收取全部缓冲区中的数据.当下一次再有数据来时 ...

  4. tcp套接字粘包解决办法

    粘包只会出现在tcp,udp传输不会产生粘包现象.解决粘包的原理就是服务器预先向客户端发送客户端即将获取文件的大小. 第一版解决方案: 服务器: # Author : Kelvin # Date : ...

  5. 基于tgp协议的套接字的 粘包解决

    客户端 import socket import struct import json phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM ...

  6. tcp粘包解决

    import socket import hashlib import subprocess import struct phone = socket.socket(socket.AF_INET,so ...

  7. Day 6-3 粘包现象

    服务端: import socket import subprocess phone = socket.socket(family=socket.AF_INET, type=socket.SOCK_S ...

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

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

  9. 解决tcp粘包问题

    目录 什么是粘包(演示粘包现象) 解决粘包 实际应用 什么是粘包 首先只有tcp有粘包现象,udp没有粘包 socket收发消息的原理 发送端可以是一K一K地发送数据,而接收端的应用程序可以两K两K地 ...

随机推荐

  1. VMware ESXi定制版(OEM ISO)资源下载(包含5.1\5.5\6.0)

     一.VMware ESXi 5.1.0 update03 1.VMware-ESXi-5.1.0-Update3-2323236-hitachi-0400.iso(日立) 2.VMware-ESXi ...

  2. 「BZOJ3339」Rmq Problem(5366)

    题目描述 输入 输出 样例输入 7 5 0 2 1 0 1 3 2 1 3 2 3 1 4 3 6 2 7 提示 这个题说来也挺有意思的 当时集训的时候遇到了一道类似的题,但是题意与此不同,我太菜了, ...

  3. 序列模型(2)-----循环神经网络RNN

    一.RNN的作用和粗略介绍: RNN可解决的问题: 训练样本输入是连续的序列,且序列的长短不一,比如基于时间的序列:一段段连续的语音,一段段连续的手写文字.这些序列比较长,且长度不一,比较难直接的拆分 ...

  4. 报错The jarsigner could not be found. Make sure to run with the build with a JDK。的解决方法

    这种报错是因为eclipse启动时没有走你设置的jdk路径,eclipse走的路径/bin下没有jarsigner.exe.所以报错,解决办法: 指定eclipse启动jdk 按住alt键,用鼠标拖动 ...

  5. [poj 2411]Mondriaan's Dream (状压dp)

    Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 18903 Accepted: 10779 D ...

  6. liunx 里面安装phpstudy环境s

    ngixwget -c http://lamp.phpstudy.net/phpstudy.bin  chmod +x phpstudy.bin    #权限设置 ./phpstudy.bin #运行 ...

  7. JAVA 中 重定向

    一.重定向:一个web资源收到客户端的请求后,通知客户端去访问另外一个web资源,这称之为请求重定向. 运用场景:如用户登录. 实现方式:通过response来实现: 如: 1.response.se ...

  8. ajax提交数据遇到400异常,原因及解决方案

    开发中遇到的问题, ajax的URL写的正确但是确无法正常跳转, 开发者模式下显示请求400异常. 前后台代码如下 ------------------------------------------ ...

  9. spring boot的几种配置类型

    1.spring boot的几种配置类型 1)基本配置,spring自动读取的,全都在application.yml里配置,spring会自动读取这个配置文件 2)个性化配置:比如配置intercep ...

  10. boost::tuple 深入学习解说

    #include<iostream> #include<string> #include<boost/tuple/tuple.hpp> #include<bo ...