Как передавать любые файлы, используя протокол tcp\ip и python serversocket?

Пользователь

от kaleigh , в категории: Python , 2 месяца назад

Как передавать любые файлы, используя протокол tcp\ip и python serversocket?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от cloyd , 2 месяца назад

@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-адрес для сервера и клиента. Вам может потребоваться изменить их в соответствии с вашими настройками сети.