Código de Python - Enviar archivos (cualquier tipo)

Imágen de perfil

Enviar archivos (cualquier tipo)gráfica de visualizaciones


Python

Publicado el 25 de Marzo del 2016 por Izan
881 visualizaciones desde el 25 de Marzo del 2016. Una media de 28 por semana
Se puede enviar cualquier archivo de un ordenador a otro, además, te dice el porcentaje del envío para que te hagas una idea de cuanto le queda.

Básicamente el "sender" lee el archivo y va enviando sockets con string de los bytes del archivo (con buffer de 65535) y el receptor los escribe en el archivo (con el mismo nombre que el archivo que le enviaron).

También me hice un sistema de enviar con python sockets JSON para poder poner id a los sockets, a lo NodeJS.

Requerimientos

Python >= 3

1.0

Actualizado el 27 de Marzo del 2016 (Creado el 25 de Marzo del 2016)gráfica de visualizaciones de la versión: 1.0
882 visualizaciones desde el 25 de Marzo del 2016. Una media de 28 por semana
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
import socket, os, sys, json, time, random
 
_BUFFER = 65535
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 
def randSTR():
    randList = ["QWERTYUIOPASDFGHJKLZXCVBNM1234567890","qwertyuiopasdfghjklzxcvbnm"]
    fLoops = random.randint(10,20)
    loops = 0
    result = ""
    while fLoops >= loops:
        loops+=1
        rn = random.randint(0,1)
        result += random.choice(randList[rn])
    return result
 
def JSONsock(name,data):
    msg = {"name":name,"data":data}
    json_msg = json.dumps(msg)
    return json_msg
 
def cls():
    os.system("cls")
 
def excep(exception):
    print("\n\n\n\tERROR: "+exception)
    input()
    main()
 
def start(sel,info):
    if sel == 1:
        client(info)
    elif sel == 2:
        server(info)
    else:
        print("ERROR")
        input()
        main()
 
def main():
    cls()
    info = socket.gethostbyname(socket.gethostname())+"  |  "+socket.gethostname()
    os.system('title " '+info+' "')
    selection = int(input("\nEnviar(1) o recivir(2) archivo?  escribe '1' / '2' -> "))
    if selection == 1 or selection == 2:
        start(selection,info)
 
def client(info):
    os.system('title " '+info+'  |  Emisor'+' "')
    host = input("\n\n\n\tIP: ")
    if host == "local":
        host = socket.gethostbyname(socket.gethostname())
    port = int(input("\n\n\tPUERTO: "))
    _file = input("\n\n\tArchivo a enviar: ")
    _type_index = _file.rfind(".")
    if _type_index != -1:
        _file_name = _file[:_type_index]
        _file_type = _file[_type_index:len(str(_file))]
    else:
        _file_name = _file
        _file_type = ""
    try:
        f = open(_file,"rb")
    except:
        excep("Archivo erróneo")
    print("\n\nEsperando al servidor...\n\n")
    while True:
        time.sleep(0.005)
        try:
            s.connect((host, port))
            break
        except:
            pass
 
    s.send(JSONsock("filename",(_file_name+'('+randSTR()+')'+_file_type)).encode("ascii"))
    file_size = os.path.getsize(_file)
    time.sleep(0.05)
    s.send(JSONsock("filesize",str(file_size)).encode("ascii"))
    time.sleep(0.05)
 
    print ("Enviando:")
    l = f.read(_BUFFER)
    sent = 0
    while (l):
        try:
            s.send(l)
            l = f.read(_BUFFER)
            sent += sys.getsizeof(l)
            percentage = (sent / file_size)*100
            print ("Enviando ( "+"%.0f" % percentage+"% )...")
        except:
            excep("Conexión perdida")
    f.close()
    s.shutdown(1)
    print ("Enviando ( 100% )...")
    print ("\n\n\tENVÍO COMPLETADO!!!\n\n")
    print ("ESPERANDO RESPUESTA...\n\n")
    print ("\n\t-SERVIDOR: "+s.recv(_BUFFER).decode("ascii")+"\n\n")
    input()
 
    try:
        main()
    except:
        print("\nERROR")
        input()
        main()
 
def server(info):
    os.system('title " '+info+'  |  Receptor'+' "')
    host = socket.gethostbyname(socket.gethostname())
    port = int(input("\n\n\tPUERTO: "))
 
    print ("\n\n\tEsperando conexión...\n\n")
 
    s.bind((host, port))
    s.listen(5)
    while True:
        c, addr = s.accept()
        print ("Conexión desde: ", addr)
 
        file_name = json.loads(c.recv(_BUFFER).decode("ascii"))
        file_size = json.loads(c.recv(_BUFFER).decode("ascii"))
        if file_size["name"] == "filesize":
            file_size = int(file_size["data"])
        recived = 0
        if file_name["name"] == "filename":
            f = open(file_name["data"],"wb")
            print ("Recibiendo: "+str(file_size)+" bytes - "+file_name["data"])
            l = c.recv(_BUFFER)
            while True:
                f.write(l)
                l = c.recv(_BUFFER)
                recived += sys.getsizeof(l)
                percentage = (recived / file_size)*100
                print ("Recibiendo ( "+"%.0f" % percentage+"% )...")
                if not l:
                    break
            f.close()
            print ("Recibiendo ( 100% )...")
            print ("\n\n\tARCHIVO RECIVIDO")
            c.send(("Gracias por conectarte!").encode("ascii"))
            c.close()
            input()
 
main()



Comentarios sobre la versión: 1.0 (0)


No hay comentarios
 

Comentar la versión: 1.0

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios

http://lwp-l.com/s3477