#server层
# 切换目录
import socket
import os
sk = socket.socket()
sk.bind(('127.0.0.1',8080))
sk.listen()
conn,addr = sk.accept()
def send_data(conn,path):
'''你给我一个目录,我把目录发给client'''
lis_dir = os.listdir(path)
str_dir = '--'.join(lis_dir) #将目录列表转换为字符串形式
conn.send(str_dir.encode('utf-8'))
abs_path = conn.recv(1024).decode('utf-8')# 获取用户输入的绝对路径
current_dir = abs_path + '/'# 以下再处理,都要根据当前路径去处理,无论是返回上一层,还是进入下一层
send_data(conn,current_dir)# 把用户输入的路径下的所有文件及文件夹返回给客户端
# C:/Program Files (x86)/Common Files
while 1:
cmd = conn.recv(1024).decode('utf-8')
if cmd == '..':
current_dir = current_dir.split('/')[:-2] #-1是去掉转换后列表中的空格,-2是去掉按列表分隔后当前路径,即最后得到的是上一级的目录
current_dir = '/'.join(current_dir)+'/' #重新将列表转为字符串形式的当前路径的上一级路径
# if 如果当前是C盘:
# 就返回给客户端告诉说没有上一层了!
send_data(conn, current_dir)
else:
filename = cmd.split(' ')[1]# 获取用户输入的文件名字,因为传过来是两个数据cmd和文件名且按空格分隔,所以文件夹需要取到第二个元素
current_dir += filename + '/'# 将文件名字添加到当前路径下,组成一个完整的新路径
if os.path.isdir(current_dir):# 如果客户输入的文件名字是一个文件夹
send_data(conn, current_dir)
else:# 如果不是一个文件夹
conn.send(b'不是文件夹')
# conn.close()
# sk.close()
#client层
import socket
import os
sk = socket.socket()
sk.connect(('127.0.0.1',8080))
abs_path = input('请输入您的根目录:')
sk.send(abs_path.encode('utf-8'))
current_dir = sk.recv(1024).decode('utf-8')
print(current_dir.split('--'))
while 1:
cmd = input('请输入>>>')
# cd + 文件夹 ..
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()