@kaleigh
Для передачи любых файлов через протокол TCP/IP с использованием серверного сокета в Python вам потребуется создать сервер, который принимает файлы от клиентов, и клиент, который отправляет файлы на сервер.
Вот пример кода для сервера:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
import socket HOST = '' # Сервер будет прослушивать все доступные сетевые интерфейсы PORT = 12345 # Порт, на котором сервер будет прослушивать входящие соединения # Создаем сокет сервера s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((HOST, PORT)) s.listen(1) # Максимальное количество одновременных клиентских подключений print('Сервер запущен и ожидает подключений...') while True: conn, addr = s.accept() # Принимаем входящее подключение print('Подключение от', addr) # Получаем имя файла от клиента filename = conn.recv(1024).decode() print('Получено имя файла:', filename) # Открываем файл на сервере для записи with open(filename, 'wb') as f: while True: data = conn.recv(1024) # Принимаем данные от клиента if not data: break f.write(data) # Записываем данные в файл print('Файл успешно получен и сохранен:', filename) conn.close() # Закрываем соединение |
А вот пример клиентского кода для отправки файла на сервер:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import socket HOST = '127.0.0.1' # IP-адрес или имя хоста сервера PORT = 12345 # Порт, на котором сервер ожидает входящие соединения filename = 'file.txt' # Имя файла, который нужно отправить # Создаем сокет клиента s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((HOST, PORT)) # Отправляем имя файла на сервер s.sendall(filename.encode()) # Открываем файл для чтения with open(filename, 'rb') as f: while True: data = f.read(1024) # Читаем данные из файла if not data: break s.sendall(data) # Отправляем данные на сервер print('Файл успешно отправлен') s.close() # Закрываем соединение |
Примечание: В коде используются фиксированные порт и IP-адрес для сервера и клиента. Вам может потребоваться изменить их в соответствии с вашими настройками сети.