Мое задание требует, чтобы я использовал сокет 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')