В значительной степени то, что я собираюсь создать, - это программа, которая, помимо прочего, может получать файл по его пути и затем отправлять его в другой сокет (протокол TCP, поэтому никаких дополнительных проблем не ожидается).

Однако я пытаюсь найти способ использовать путь к файлу для отправки файла клиенту, и я просто не могу его найти ... Любая помощь приветствуется = D ^^

-2
GreenManchego1984 2 Май 2021 в 22:37

1 ответ

Лучший ответ

Вы можете использовать сокет и метод sendfile. Здесь нужно проделать некоторую работу для больших файлов, размер которых превышает размер приемного буфера, но я оставлю эту работу вам.

test.txt

Hello World!

server.py

import socket

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind(('127.0.0.1', 65432))
    s.listen()
    while True:
        conn, client = s.accept()
        with conn:
            path = conn.recv(1024).decode()
            print(f'Client {client} requested file {path}')

            with open(path, "rb") as f:
                data = conn.sendfile(f)

client.py

import socket

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect(('127.0.0.1', 65432))
    s.sendall(b'test.txt')
    data = s.recv(1024).decode()

print(f"Received data: {data}")

Выходы:

## server logs
Client ('127.0.0.1', 62999) requested file test.txt
## client logs
Received data: Hello World!
0
flakes 2 Май 2021 в 19:55