Programación Web y Scripting > Python

 ejercicio para pasar un archivo de servidor cliente no puedo resolverlo

(1/1)

$francisco:
muy buenas, decir que soi nuevo en este foro, explico un poco mi situacion, ya consegui enviar datos mediante el modulo os con la funcion listdir pero ahora quiero pasar archivos como por ejemplo un archivo.exe o una foto, se que estare muy lejos de conseguirlo pero aber si me podeis echar una mano, aqui os dejo lo que he llegado ha hacer, ya se que no me abre nisiquiera hacercado ha como se hacer pero bueno... :

cliente:


--- Código: Python ---import socket s = socket.socket()s.bind(("", 9999))s.listen(2) while True:    recivido = sc.recv(1024)    print recivido    if recivido == "":        print "fin del listado \n"        break raw_input("pulsa enter para cerrar conexiones")s.close()sc.close() 
servidor:


--- Código: Python ---import socket s = socket.socket()s.connect(("192.168.1.101", 9999)) f = open("archivo.exe", "rb") s.send(f) raw_input("enter para salir") s.close()

RadicalEd:
No puedes envíar la variable f, ya que contiene solamente el buffer donde está abierto el fichero, debes recorrerlo

--- Código: Python ---f = open("archivo.exe", "rb")while True:      linea = f.readline()      if not linea: break      s.send(linea) Aunque esto es un poco loco ya que son archivos binarios, yo los enviaría jugando con base64

--- Código: Python ---import base64f = open("archivo.exe", "rb")while True:      encoded = base64.b64encode(f.readline())      if not f.readline(): break      s.send(encoded) Algo así, revisalo, además deberás decodificar el base64 al otro lado

$francisco:
muchas gracias por tu script, pero encontre una forma de poder transferir cualquier archivo solo hay que definir f.rear() por ejemplo:


--- Código: Python ---f = open("nombre_archivo.extension", "wb")  #le digo que lo abra y lo lea en binario data = f.read() #le digo que lo lea o lo recorra como lo a leido al abrirlo en binario de forma que se #envia en binario s.send(data) #envio con data por socket lo que lei en el archivo en binario y lo envio a quien #tengamos puesto
al igual que se envia en binario el quien lo reciva tendra que crear un archvio y copiarlo tambien en binario ejemplo:

cliente:


--- Código: Python ---recivido = sc.recv(99999)nombre = raw_input("escriba el nombre del archivo: ")#nombre.extension si no no tendra formatof = open(nombre, "wb")f.write(revicido)
de esta manera todo lo que se envie aunque sea musica imajenes... funciona, yo lo e probado y funciona.
 

Navegación

[0] Índice de Mensajes

Ir a la versión completa