美文网首页
【第43天】python全栈从入门到放弃

【第43天】python全栈从入门到放弃

作者: 36140820cbfd | 来源:发表于2019-09-28 20:46 被阅读0次

    1 客户端输入命令,传输到服务端调用操作系统命令

    客户端代码:

    代码块
    import socket
    
    sk = socket.socket()
    
    sk.connect_ex(('127.0.0.1',8080))
    
    while 1:
    
        cmd = input('请输入一个命令>>>')
    
        sk.send(cmd.encode('utf-8'))
    
        result = sk.recv(102400).decode('gbk')
    
        print(result)
    
    sk.close()
    

    服务端代码:

    代码块
    import socket
    
    import subprocess
    
    sk = socket.socket()
    
    sk.bind(('127.0.0.1',8080))
    
    sk.listen()
    
    conn,addr = sk.accept()
    
    while 1:
    
        cmd = conn.recv(1024).decode('utf-8')
    
        r = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
    
        stdout = r.stdout.read()
    
        stderr = r.stderr.read()
    
        if stderr:
    
            conn.send(stderr)
    
        else:
    
            conn.send(stdout)
    
    conn.close()
    
    sk.close()
    

    2 模拟ftp文件的上传下载

    客户端:

    代码块
    import socket
    
    import os
    
    import json
    
    sk = socket.socket()
    
    sk.connect_ex(('127.0.0.1', 8080))  # 带返回值,如果出错,不会报错,会返回错误的编码
    
    # sk.connect()# 会直接报错    两个都是连接服务器的功能
    
    menu = {'1': 'upload', '2': 'download'}
    
    for k, v in menu.items():
    
        print(k, v)
    
    num = input('请输入功能选项:')
    
    if num == '1':
    
        file_path = input('请输入一个文件的绝对路径>>>')
    
        # D:/sylar/python_workspace/day31/文件上传下载/__init__.py
    
        filename = os.path.basename(file_path)
    
        with open(file_path, 'r', encoding='utf-8') as f:
    
            content = f.read()
    
        dic = {'opt': menu.get(num), 'filename': filename, 'content': content}
    
        str_dic = json.dumps(dic)  # 把字典序列化,用来传输
    
        sk.send(str_dic.encode('utf-8'))  # 发射给服务器
    
    sk.close()
    
    
    

    服务端:

    代码块
    import socket
    
    import json
    
    sk = socket.socket()
    
    sk.bind(('127.0.0.1',8080))
    
    sk.listen()
    
    conn,addr = sk.accept()
    
    str_dic = conn.recv(9090).decode('utf-8')    #接收客户端传输的数据
    
    dic = json.loads(str_dic)    #解析数据,还原字典
    
    # dic = {'opt':menu.get(num),'filename':filename,'content':content}
    
    if dic['opt'] == 'upload':    #判断客户端手否输入的是upload
    
        # 上传
    
        filename = 'new' + dic['filename']      #写入新文件的名字
    
        with open(filename,'w',encoding='utf-8') as f:
    
            f.write(dic['content'])
    
    conn.close()
    
    sk.close()
    
    别跑,点个赞再走

    相关文章

      网友评论

          本文标题:【第43天】python全栈从入门到放弃

          本文链接:https://www.haomeiwen.com/subject/vhrsyctx.html