• 粘包解决高端_Server


    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 #一旦产生异常就终止程序

    Win a contest, win a challenge
  • 相关阅读:
    saltstack编写自定义模块
    saltstack数据系统Pliiar
    saltstack数据系统Grains
    saltstack正则匹配主机
    docker安装httpd+php为zabbix提供web服务
    saltstack安装部署
    zabbix报警(向消息中心发送报警信息)
    selenium用css、xpath表达式进行元素定位
    pytest+allure基础知识
    pythonGUI-PySide2的使用笔记
  • 原文地址:https://www.cnblogs.com/pandaboy1123/p/8538297.html
Copyright © 2020-2023  润新知