zoukankan      html  css  js  c++  java
  • Python随心记--socket-tcp

    #服务端
    from socket import *
    import subprocess
    import struct
    ip_port=('127.0.0.1',8080)
    back_log=5
    buffer_size=1024
    
    tcp_server=socket(AF_INET,SOCK_STREAM)
    tcp_server.bind(ip_port)
    tcp_server.listen(back_log)
    
    while True:
        conn,addr=tcp_server.accept()
        print('新的客户端链接',addr)
        while True:
            #
            try:
                cmd=conn.recv(buffer_size)
                if not cmd:break
                print('收到客户端的命令',cmd)
    
                #执行命令,得到命令的运行结果cmd_res
                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)
                conn.send(data_length)
                conn.send(cmd_res)
            except Exception as e:
                print(e)
                break
    
    #客户端
    from socket import *
    import struct
    from functools import partial
    ip_port=('127.0.0.1',8080)
    back_log=5
    buffer_size=1024
    
    tcp_client=socket(AF_INET,SOCK_STREAM)
    tcp_client.connect(ip_port)
    
    while True:
        cmd=input('>>: ').strip()
        if not cmd:continue
        if cmd == 'quit':break
    
        tcp_client.send(cmd.encode('utf-8'))
    
    
        #解决粘包
        length_data=tcp_client.recv(4)
        length=struct.unpack('i',length_data)[0]
    
        recv_size=0
        recv_data=b''
        while recv_size < length:
            recv_data+=tcp_client.recv(buffer_size)
            recv_size=len(recv_data)
        print('命令的执行结果是 ',recv_data.decode('gbk'))
    tcp_client.close()
  • 相关阅读:
    【原创】颜色替换的递归算法
    【原创】Hacker学习发展流程图 V1.0
    【转载】基数排序
    【翻译】利用加速度求解位置的算法——三轴传感器
    js高级程序设计——笔记
    java中的多线程——进度1
    数据结构和算法——进度1
    java String字符串——进度1
    java中运算符——进度1
    jquery的插件机制
  • 原文地址:https://www.cnblogs.com/Essaycode/p/10236001.html
Copyright © 2011-2022 走看看