Есть ли способ отправки больших файлов по UDP - PullRequest
0 голосов
/ 15 октября 2019

Я только начал изучать сетевое программирование на Python. В настоящее время работаю над домашней работой, которая запрашивает использование UDP для отправки файлов с клиента на сервер, а затем обратно на клиент. Тем не менее, мои коды хорошо работают с небольшими файлами, но были проблемы с большими файлами.

Я нашел способ использования os os для определения размера файла. Поэтому я подумываю о том, чтобы разделить файл, если он больше максимального размера, который может отправить UDP, и отправить разделенный файл один за другим.

Но тогда я не уверен, какой максимальныйразмер, который может отправить UDP, и как я могу собрать все разделенные части вместе при отправке?

// Client side

import os
from socket import *

//Set up information of server
server_name = '127.0.0.1'  # 127.0.0.1 is local IP
server_port = 12000
clientSocket = socket(AF_INET, SOCK_DGRAM)

//Request the location of file
foundFile = 0
while foundFile == 0:
    print("========================================")
    print("[Please input the path of the file you wish to transmit.]")
    path = input("[Path]: ")
    print("========================================")

if os.path.isfile(path):
    print("[File found.]")

    fileSize = os.path.getsize(path)
    print("[File size is : ", fileSize, 'bits]')

    print("[Starting file transmission.]")
    foundFile = 1
else:
    print("[File not found.] Please re-enter the correct path.")
    print("[Please choose only on file, or enter the correct path.]")
    foundFile = 0

fileOpen = open(path, 'rb')
file = fileOpen.read()
clientSocket.sendto(file, (server_name, server_port))

Итак, если файл небольшой, он должен быть отправлен на сторону сервера. Позже в коде серверная часть отправит то же самое обратно и создаст копию на рабочем столе.

Однако, если файл слишком большой, он выдаст ошибку: clientSocket.sendto (file,(имя_сервера, порт_сервера)) Ошибка OSE: [WinError 10040]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...