Как использовать сокет python для создания приложения файловой службы? - PullRequest
0 голосов
/ 21 октября 2019

Мое задание требует, чтобы я использовал сокет python для написания кода, чтобы удовлетворить требования для сервера и клиента ниже соответственно: для сервера: быть в состоянии обработать запрос, данный клиентом, такой как загрузка и выгрузка файла, список 1-гоУровень содержимого каталога. для клиента: иметь возможность «поставить» запрос и «получить» запрос, что означает загрузку файла и загрузку файла, а также «список» содержимого каталога. Это означает, что в командной строке я должен написать что-то вроде этого в моем клиентском скрипте:

python client.py localhost 6789 put test1.txt
python client.py localhost 6789 get test2.txt
python client.py localhost 6789 list

Это код, который я пишу, когда клиент хочет загрузить файл, а сервер должен его получить,и я не знаю, как справиться с «положи» и «получи» такого рода вещи. Тем не менее, когда я пытаюсь запустить это, я просто выдал ошибку «файл не найден», когда я пытаюсь напечатать что-то вроде python client.py localhost 6789 test1.txt (я не знаю, как добавить 'put') в моей командной строке для моего клиента.

server.py
import socket
import sys 
srv_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
srv_sock.bind(("", int(sys.argv[1])))
srv_sock.listen(5)
while True:   
    def recv_file(socket,filename):
        with open(filename,'wb') as file:
            while True:
                print('receiving data')
                data=socket.recv(1024)
                print('data:',(data))
                if not data:
                    break
                file.write(data)
        file.close()

    cli_sock, cli_addr = srv_sock.accept()  
    print(cli_addr,'server up and running')
    request = cli_sock.recv(1024)   
    recv_file(srv_sock,'storedata.txt')
print(str(cli_addr) + ": " + request.decode('utf-8')) 
print('successful')
cli_sock.close()
client.py
import socket 
import sys 
cli_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
def send_file(socket,filename) :
    file=open(filename,'r')
    l=file.read(1024)
    socket.send(l)
    print('send',repr(l))
    file.close()


cli_sock.connect((sys.argv[1], int(sys.argv[2])))
print('connected')
send_file(cli_sock,(sys.argv[3].encode('utf-8')))

cli_sock.close()
print('connection closed')
...