zoukankan      html  css  js  c++  java
  • 网络编程之系统操作

    一  相关的模块

     1 subprocess模块:执行系统模块

      subprocess.Popen():调用当前系统来执行命令。

       stdout:标准正确的输出

       stderr:错误的输出

       stdin:输入

       shell=True:系统解释器

       subprocess.PIPE:就是一个管道

     2 struct模块

     struct.pack:打包成一个bates类型

     struct.unpack:解包,解包一个bates的类型

      struct的一些方法:

    详细网站:http://www.cnblogs.com/coser/archive/2011/12/17/2291160.html

    实例一:

      服务端:

    import socket
    import subprocess
    import struct
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    phone.bind(('127.0.0.1',8080))
    phone.listen(10)
    while True:
        conn,addr=phone.accept()
        print(addr[0:2])
        while True:
            try:
                msg=conn.recv(1024).decode('utf-8')
                obj=subprocess.Popen(msg,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
                stdout=obj.stdout.read()
                stderr=obj.stderr.read()
                tes=struct.pack('i',len(stdout)+len(stderr))
                conn.send(tes)
                conn.send(stdout)
                conn.send(stderr)
            except Exception:
                break
        conn.close()
    phone.close()
    

      客户端:

    import socket
    import struct
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    phone.connect(('127.0.0.1',8080))
    while True:
        msg=input('>>>:').strip()
        phone.send(msg.encode('utf-8'))
        if not msg:continue
        tes=phone.recv(4)
        tes_size=struct.unpack('i',tes)[0]
        print(tes_size)
        msg_data_1=b''
        data_size=0
        while data_size<tes_size:
            msg_data=phone.recv(1024)
            msg_data_1+=msg_data
            data_size+=len(msg_data)
    
        print(msg_data_1.decode('gbk'))
    phone.close()
    

     实例二:

      服务端:

    import socket
    import subprocess
    import struct
    import json
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    phone.bind(('127.0.0.1',8080))
    phone.listen(10)
    while True:
        conn,addr=phone.accept()
        print(addr[0:2])
        while True:
            try:
                msg=conn.recv(1024).decode('utf-8')
                obj=subprocess.Popen(msg,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
                stdout=obj.stdout.read()
                stderr=obj.stderr.read()
                ret_dic={'filename':'a.txt','filesize':len(stdout)+len(stderr)}   #设定报头
                ret_bytes=json.dumps(ret_dic).encode('utf-8')   #首先转成字符传类型,再转成bytes类型
                conn.send(struct.pack('i',len(ret_bytes)))       #发送转成bytes类型后打包的固定字节长度
                conn.send(ret_bytes)                              #发送转成后的bytes类型
                conn.send(stdout)
                conn.send(stderr)
            except Exception:
                break
        conn.close()
    phone.close()
    

       客户端:

    import socket
    import struct
    import json
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    phone.connect(('127.0.0.1',8080))
    while True:
        msg=input('>>>:').strip()
        phone.send(msg.encode('utf-8'))
        if not msg:continue
        ret_size=struct.unpack('i',phone.recv(4))[0]        #接收报头的长度
        tes_size=json.loads(phone.recv(ret_size).decode('utf-8'))['filesize']    #接收报头并转成字典类型并提取接收数据的长度
        msg_data_1=b''      #设置一个接收数据bytes类型为空
        data_size=0         #设置一个接收数据的大小为0
        while data_size<tes_size:  #循环条件
            msg_data=phone.recv(1024)   #接收数据的大小
            msg_data_1+=msg_data    #添加数据到设置的空的数据里
            data_size+=len(msg_data)      #接收数据的大小自加每次接收的大小
        print(msg_data_1.decode('gbk'),tes_size)
    phone.close()
    
  • 相关阅读:
    基于C#和Asp.NET MVC开发部标视频和苏标主动安全监控平台
    基于Java Netty框架构建高性能的部标808协议的GPS服务器
    交通部796部标平台开发索引
    GPS部标监控平台的功能设计(一)-功能列表
    基于Java Mina框架的部标jt808服务器设计和开发
    基于Asp.NET MVC框架+SignalR +ActiveMQ + Ali OSS 服务构建苏标主动安全智能防控平台
    部标809协议2019版本与2011版本的区别
    出租车Jt/T 905协议与部标1078协议融合的网约车视频监控平台
    基于JT/T 1078协议设计和开发部标视频服务器
    基于Html5+HLS协议播放符合部标1078协议的实时流媒体视频
  • 原文地址:https://www.cnblogs.com/fangjie0410/p/7597051.html
Copyright © 2011-2022 走看看