• socket实现目录路径的相关操作


    本知识需要注意!
        1.客户端输入路径后,到达服务器端需要先加上"/"否则可能会出错
        2.找到该路径下的目录内容调用os的listdir()方法,返回的是一个列表的形式,必须将其格式化为字符串
        3.目录内容格式化为字符串,需要用某个字符去作为分隔符,再用分隔符.join()的方法将列表转为指定分隔符分隔的字符串
        4.到达客户端时,输出split()按某个特定分隔符分隔后的列表即可输出目录内容
        5.服务器端的返回上一级目录时,其原理是去掉当前路径的路径名,如c:/test/111,要返回到test则需要去掉114
        6.依据第五点的原理,需要将当前路径按windows的分隔符进行分隔,但是此方法分隔成列表后列表最后一个元素会多出一个空格,
          所以去掉路径名的同时也需要去掉空格,即在split()后加上[:-2]即可(去掉列表最后的两个元素)
    
    
    #server层
    import socket
    import os
    sk=socket.socket()
    sk.bind(("10.70.2.143",8080))
    sk.listen()
    conn,addr=sk.accept()
    #获取当前路径,以后的操作都需要根据该路径进行操作
    abs_path=conn.recv(1024).decode("utf-8")
    #需要加上"/"否则可能会出错
    current_path=abs_path+"/"
    #定义sendata函数,以后的操作都需要用到该函数
    def senddata(conn,current_path):
        list_dir=os.listdir(current_path)
        #将列表形式的目录转为字符串
        str_dir='--'.join(list_dir)
        conn.send(str_dir.encode('utf-8'))
    senddata(conn,current_path)
    
    #切换目录
    while 1:
        #返回上一级目录
        #先接收第二次发过来的命令
        cmd=conn.recv(1024).decode('utf-8')
        if cmd == '..':
            #判断是否到达顶层根目录,如E:/
            if len(current_path.split('/'))==2: #因为分隔后会多出一个空格,所以判断元素是2个
                conn.send("已经到达最顶层根目录,无法再返回!".encode('utf-8'))
            #获取当前路径(current_path)并转为列表形式去掉空格和当前路径名
            else:
                current_path=current_path.split('/')[:-2] #因为分隔后会多出一个空格,所以需要去掉当前路径名以及空格,即列表最后的两个元素
                #再将操作后的路径转为字符串形式,注意末尾需要加上'/'否则会出错
                current_path='/'.join(current_path)+'/'
                senddata(conn,current_path)
        else:
        #进入指定的文件夹
            filename = cmd.split(' ')[1] #因为传过来的文件夹名是位于第二个元素,第一个元素是命令名称
            current_path+=filename+'/'   #把文件夹名称添加到当前路径,组成一个完整的新路径
            if os.path.isdir(current_path):#如果输入的是一个文件夹
                senddata(conn,current_path)
            else:
                conn.send("不是一个文件夹".encode('utf-8'))
    
    conn.close()
    sk.close()
    
    
    
    
    
    #client层
    import socket
    sk=socket.socket()
    sk.connect(("10.70.2.143",8080))
    #显示当前路径
    dir_path=input("请输入根目录")
    sk.send(dir_path.encode('utf-8'))
    current_dir=sk.recv(1024).decode("utf-8")
    print(current_dir.split('--'))
    
    #切换目录
    while 1:
        cmd=input("请输入操作命令")
        #返回上一级目录
        if cmd == "..":
            sk.send(cmd.encode('utf-8'))
            current_dir = sk.recv(1024).decode("utf-8")
            print(current_dir.split('--'))
        #进入到指定的文件夹
        if cmd == "cd":
            filename=input("请输入一个文件夹名称")
            sk.send((cmd+" "+filename).encode('utf-8'))
            current_dir = sk.recv(1024).decode("utf-8")
            print(current_dir.split('--'))
    
    sk.close()
  • 相关阅读:
    052-14
    052-13
    css垂直居中
    js中的null 和undefined
    给数组添加属性
    js中避免函数名和变量名跟别人冲突
    js变量问题
    Life
    BFC和haslayout
    json文件
  • 原文地址:https://www.cnblogs.com/god-for-speed/p/11719053.html
Copyright © 2020-2023  润新知