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. hibernate详细配置

    映射配置 <!-- 映射文件: 映射一个实体类对象:  描述一个对象最终实现可以直接保存对象数据到数据库中.  --> <!-- package: 要映射的对象所在的包(可选,如果不 ...

  2. js阻止点击事件的冒泡的实现

    <html> <head> <script type="text/javascript"> function fnclick1(){ alert ...

  3. 取得Linux系统的各种统计信息

    本文基于Linux 2.6.x内核 一.取得CPU信息(相关文件/proc/stat) 在一个系统中的/proct/stat文件内容如下 $ cat /proc/stat cpu 1039426 17 ...

  4. Css进阶练习(实现抽屉网样式布局)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. LINUX 中 VSFTPD安裝

    VSFTPD 简写:vsftpd是very secure FTP daemon 的缩写,是一个完全免费的,开源代码的ftp服务器软件 特点:vsftpd是一款在LINUX发行版中最受推崇的FTP服务器 ...

  6. [转载]解决/usr/bin/ld: cannot find -lxxx

    在linux环境编译应用程式或lib的source code时常常会出现如下的错误讯息: /usr/bin/ld: cannot find -lxxx 这些讯息会随着编译不同类型的source cod ...

  7. PHP学习总结(3)——PHP入门篇之PHP的echo语句

    Echo语句 echo是PHP中的输出语句,可以把字符串输出(字符串用双引号括起来). 如下代码: <?php echo "Hello world!";?> 注意ech ...

  8. yii 正则验证

    required : 必须值验证属性 [['字段名'],required,'requiredValue'=>'必填值','message'=>'提示信息']; #说明:CRequiredV ...

  9. BA-siemens-insight-event builder使用

    event builder功能主要是用来给report使用的,作为一个独立的对象,这个对象的功能就是收集点位的信息,如果再使用report功能就可以显示或输出点位的信息.

  10. jqury+animation+setTimeOut实现渐变显示与隐藏动画

    初始效果 实现效果 1,编写HTMl结构代码 <div class="box"> <i class="icon"></i> ...