zoukankan      html  css  js  c++  java
  • 粘包解决高端_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
  • 相关阅读:
    通过elasticsearch对日志进行搜索热词统计
    登陆获取shell时的配置文件加载过程
    linux共享库加载
    linux安全相关
    ELK常用API使用方法
    linux bash缓存
    redis主从架构及redis集群
    排查电脑的网络问题
    Logstash添加Protobuf解析插件
    Macaca上手体验
  • 原文地址:https://www.cnblogs.com/pandaboy1123/p/8538297.html
Copyright © 2011-2022 走看看