From 84b57879d082ba1a9d69844cb781c123658d1926 Mon Sep 17 00:00:00 2001 From: Oleg Kazmin <76499054+OlegAtor777@users.noreply.github.com> Date: Thu, 23 Dec 2021 10:53:30 +0300 Subject: [PATCH] Add files via upload --- docs/3 | 1 + ftp-client.py | 21 +++++++++++- ftp-server.py | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 114 insertions(+), 2 deletions(-) create mode 100644 docs/3 diff --git a/docs/3 b/docs/3 new file mode 100644 index 0000000..5c5a7ad --- /dev/null +++ b/docs/3 @@ -0,0 +1 @@ +Hello from file 3 \ No newline at end of file diff --git a/ftp-client.py b/ftp-client.py index 3339519..6e9a1b6 100644 --- a/ftp-client.py +++ b/ftp-client.py @@ -1,7 +1,21 @@ 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 +PORT = 8080 while True: request = input('>') @@ -11,6 +25,11 @@ sock.send(request.encode()) + if request == 'exit': + sock.close() + print('Соединение прервано') + break + response = sock.recv(1024).decode() print(response) diff --git a/ftp-server.py b/ftp-server.py index bdb4f38..2b7b030 100644 --- a/ftp-server.py +++ b/ftp-server.py @@ -1,22 +1,114 @@ 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 + +PORT = 8080 sock = socket.socket() sock.bind(('', PORT))