Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/3
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Hello from file 3
21 changes: 20 additions & 1 deletion ftp-client.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,21 @@
import socket

print("*************** Доступные команды ***************")
print("pwd - название текущей директории")
print("ls - содержимое текущей директории")
print("cat <filename> - содержимое файла")
print("mkdir <dirname> - создать новую директорию")
print("rmdir <dirname> - удалить пустую директорию")
print("create <filename> <text> - создать файл, записать в него текст <text>")
print("remove <filename> - удалить файл")
print("rename <oldfilename> <newfilename> - переименовать файл")
print("copy_to_server <filename1> <filename2> - отправить файл с клиента на сервер")
print("copy_from_server <filename1> <filename2> - скачать файл с сервера на клиент")
print("exit - выход")


HOST = 'localhost'
PORT = 6666
PORT = 8080

while True:
request = input('>')
Expand All @@ -11,6 +25,11 @@

sock.send(request.encode())

if request == 'exit':
sock.close()
print('Соединение прервано')
break

response = sock.recv(1024).decode()
print(response)

Expand Down
94 changes: 93 additions & 1 deletion ftp-server.py
Original file line number Diff line number Diff line change
@@ -1,22 +1,114 @@
import socket
import os
import shutil
'''
pwd - показывает название рабочей директории
ls - показывает содержимое текущей директории
cat <filename> - отправляет содержимое файла
mkdir <dirname> - создать новую директорию
rmdir <dirname> - удалить пустую директорию
create <filename> <text> - создать файл, записать в него текст <text>
remove <filename> - удалить файл
rename <oldfilename> <newfilename> - переименовать файл
copy_to_server <filename1> <filename2> - отправить файл с клиента на сервер
copy_from_server <filename1> <filename2> - скачать файл с сервера на клиент
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))
Expand Down