diff --git a/ftp-client.py b/ftp-client.py index 3339519..305392f 100644 --- a/ftp-client.py +++ b/ftp-client.py @@ -1,17 +1,30 @@ import socket +print("*************** Доступные команды ***************") +print("pwd - название текущей директории") +print("ls - содержимое текущей директории") +print("cat - содержимое файла") +print("mkdir - создать новую директорию") +print("rmdir - удалить пустую директорию") +print("create - создать файл, записать в него текст ") +print("remove - удалить файл") +print("rename - переименовать файл") +print("copy_to_server - отправить файл с клиента на сервер") +print("copy_from_server - скачать файл с сервера на клиент") +print("exit - выход") + + HOST = 'localhost' PORT = 6666 -while True: - request = input('>') - - sock = socket.socket() - sock.connect((HOST, PORT)) - +@@ -11,6 +25,11 @@ + sock.send(request.encode()) - + + if request == 'exit': + sock.close() + print('Соединение прервано') + break + response = sock.recv(1024).decode() print(response) - - sock.close() \ No newline at end of file diff --git a/ftp-server.py b/ftp-server.py index bdb4f38..582c17c 100644 --- a/ftp-server.py +++ b/ftp-server.py @@ -1,35 +1,113 @@ import socket import os +import shutil ''' pwd - показывает название рабочей директории ls - показывает содержимое текущей директории cat - отправляет содержимое файла +mkdir - создать новую директорию +rmdir - удалить пустую директорию +create - создать файл, записать в него текст +remove - удалить файл +rename - переименовать файл +copy_to_server - отправить файл с клиента на сервер +copy_from_server - скачать файл с сервера на клиент +exit - выход ''' dirname = os.path.join(os.getcwd(), 'docs') def process(req): + if req == 'pwd': return dirname + elif req == 'ls': return '; '.join(os.listdir(dirname)) + + elif req[:3] == 'cat': + if req[3] == ' ': + path = os.path.join(os.getcwd(), 'docs', req[4:]) + if os.path.exists(path): + with open(path, 'r') as f: + str_ = '' + for i in f: + str_+=i + if str_ =="": + conn.send('Файл пуст'.encode()) + return str_ + else: + return f'Файла {req[4:]}\nне существует в данной директории' + else: + return 'Неправильный ввод команды cat' + + + elif req[:5] == 'mkdir': + if req[5] == " ": + path = os.path.join(os.getcwd(), 'docs', req[6:]) + if not os.path.exists(path): + os.makedirs(path) + return f'Папка {req[6:]} создана' + else: + return f'Неправильный ввод либо папка {req[6:]}\nуже существет, придумайте другое имя для папки' + else: + return 'Неправильный ввод команды mkdir' + + elif req[:5] == 'rmdir': + if req[5] == " ": + path = os.path.join(os.getcwd(), 'docs', req[6:]) + if os.path.exists(path): + shutil.rmtree(os.path.join(os.getcwd(), 'docs', req[6:])) + return f'Папка {req[6:]} удалена' + else: + return f'Папки {req[6:]}не существует' + else: + return 'Неправильный ввод команды rmdir' + + elif req[:6] == 'create': + if req[6] == " ": + req = req.split(' ') + file_text = ' '.join(req[2:]) + with open(os.path.join(os.getcwd(), 'docs', req[1]), 'tw', encoding='utf-8') as f: + f.write(file_text) + return f'Файл создан' + else: + return 'Неправильный ввод команды create' + + elif req[:6] == 'remove': + os.remove(os.path.join(os.getcwd(), 'docs', req[7:])) + return f'Файл {req[7:]} удален' + + elif req[:6] == 'rename': + if req[6] == " ": + req = req.split(' ') + os.rename(os.path.join(os.getcwd(), 'docs', req[1]), os.path.join(os.getcwd(), 'docs', req[2])) + return 'Файл переименован' + else: + return 'Неправильный ввод команды remove' + + elif req[:14] == 'copy_to_server': + if req[14] == " ": + file1 = os.path.join(os.getcwd(), 'docs', req.split()[2]) + file2 = os.path.join(dirname, req.split()[1]) + shutil.copyfile(file1, file2) + return 'Успешное копирование' + else: + return 'Неправильный ввод команды copy_to_server' + + elif req[:16] == 'copy_from_server': + if req[16] == " ": + file1 = os.path.join(os.getcwd(), 'docs', req.split()[2]) + file2 = os.path.join(dirname, req.split()[1]) + shutil.copyfile(file2, file1) + return 'Успешное копирование' + else: + return 'Неправильный ввод команды copy_from_server' + return 'bad request' + PORT = 6666 sock = socket.socket() -sock.bind(('', PORT)) -sock.listen() -print("Прослушиваем порт", PORT) - -while True: - conn, addr = sock.accept() - - request = conn.recv(1024).decode() - print(request) - - response = process(request) - conn.send(response.encode()) - -conn.close()