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

Posted god-for-speed

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()

 

以上是关于socket实现目录路径的相关操作的主要内容,如果未能解决你的问题,请参考以下文章

如何确定Linux内核源代码目录即,KBUILD的路径

请使用socket相关函数(非curl)实现如下功能:构造一个post请求,发送到指定httpserver的指定端口的指定请求路径(如http://www.example.com:8080/test)

socket相关操作(下)

golang代码片段(摘抄)

PHP 目录的相关操作

Xcode相关路径