es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Transferencia de archivos UDP en Python

Recientemente he comenzado a aprender programación de sockets. Estoy intentando escribir un programa en python para transferir un archivo del servidor al cliente. He escrito el siguiente código. Está funcionando perfectamente…pero no estoy recibiendo el archivo en el lado del cliente (tal vez la transferencia no se está llevando a cabo).

Este es el código del lado del servidor:

import socket

host = "127.0.0.1"
port = 12000
buffer_size = 1024
file_name = 'MiArchivo.txt'

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((host, port))

sock.sendto(file_name.encode(), (host, port))

f = open(file_name, "r")
data = f.read(buffer_size)
while data:
  print(data)
  if(sock.sendto(data.encode(), (host, port))):
    data = f.read(buffer_size)

sock.close()
f.close()

Este es el código del lado del cliente:
import socket

host = "127.0.0.1"
port = 12000

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((host, port))

f = open('MiArchivo2.txt', 'wb')
print('Se ha creado un nuevo archivo')

while True:
  data, addr = sock.recvfrom(1024)
  print(data)
  while(data):
    f.write(data.decode("utf-8"))
    data, addr = sock.recvfrom(1024)

print('¡Archivo recibido exitosamente!')
f.close()
f = open('MiArchivo2.txt', 'r')
print(f.read)

f.close()
sock.close()
print('¡Conexión cerrada!')

¿Alguien puede ayudarme a encontrar el problema en mi código? ¡Gracias de antemano!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que hay algunos problemas con el código proporcionado, lo que puede estar causando que la transferencia de archivos falle:

    1. El código del servidor está enviando el nombre del archivo al cliente, pero no está claro si el cliente está utilizando este nombre de archivo para crear el nuevo archivo. En su lugar, está codificando el nombre del archivo como “Myfile2.txt”. Asegúrate de que el cliente utilice el nombre de archivo correcto al crear el archivo.
    2. El código del servidor está enviando los datos del archivo utilizando encode() para convertir los bytes a una cadena de texto, pero el código del cliente está utilizando decode() para convertirlo nuevamente en bytes. Esto podría resultar en corrupción de datos. En su lugar, ambos lados deberían usar send() y recv() para transferir los datos como bytes.

    3. El código del cliente está cerrando el archivo demasiado pronto, antes de que se haya escrito todo el archivo. Mueve la línea f.close() fuera del bucle para asegurarte de que el archivo se cierre solo una vez que se hayan escrito todos los datos.

    Intenta hacer estos cambios y ejecuta el código nuevamente para ver si la transferencia de archivos tiene éxito.

Comments are closed.