2012-01-04 12 views
5

No sé si esto se ha respondido antes (miré en línea pero no pude encontrar uno), pero ¿cómo puedo enviar un archivo (.exe si es posible) a través de una red a otra computadora que está conectada a la red ? Probé enchufes pero solo pude enviar cadenas y traté de aprender ftplib pero no lo entiendo del todo o si ftp es incluso lo que estoy buscando, así que estoy completamente parado. Cualquier entrada es apreciada (incluso más si alguien puede explicar FTP, ¿es como un socket? Todos los ejemplos que he visto no tienen un programa de servidor donde el cliente puede conectarse.)¿Cómo transferir un archivo entre dos computadoras conectadas en python?

+2

Es ciertamente posible hacer esto con enchufes normales. ¿Qué intentaste? –

+0

Debería usar 'scp' o incluso' rsync' – wim

Respuesta

5

un código de ejemplo simplista para el lado de envío:

if os.path.exists(df): 
    with open(df, 'rb') as f: 
    packet = f.read(blocksize) 

    while packet != '': 
     conn.send(packet) 

     packet = f.read(blocksize) 

Dónde:

df = 'path/to/data/file' 
blocksize = 8192 # or some other size packet you want to transmit. 
       # Powers of 2 are good. 
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
+0

ok gracias, ¿entonces no se necesita FTP? Todavía no entiendo realmente para qué se usa – Baboon

+1

@Baboon - FTP es un protocolo especializado para la transferencia de archivos, sí. Incluye una serie de conveniencias que los clientes/servidores acuerdan - reconocimientos, actualizaciones de estado, reintentos, concurrencia, etc. Puede leer la especificación completa en este RFC: https://www.ietf.org/rfc/rfc959.txt.Sin embargo, FTP no es la única forma de transferir un archivo, y usar sockets para transmitir los datos es definitivamente posible. Por lo general, el Servidor y el Cliente necesitan acordar un vocabulario/diálogo y saber cómo acordar cuándo se ha transferido completamente el archivo. –

6

A. Yo uso SimpleHTTPServer por esto a veces:

python -m SimpleHTTPServer 

... que serviría los archivos en el directorio actual en el puerto 8000. Abra el navegador web en otro ordenador y descargar lo que quieras.

conocer la dirección IP de su ordenador, puede utilizar (en Ubuntu) ifconfig, por ejemplo:

$ ifconfig 
enp0s31f6 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx 
      inet addr:10.0.0.3 Bcast:10.0.0.255 Mask:255.255.255.0 

Luego, en el otro ordenador, se envía al navegador: http://10.0.0.3:8000.

B. Si tiene SSH habilitado, puede usar paramiko para conectar y transferir SFTP lo que desee.

+0

+1 para obtener dos valiosos conocimientos que acaba de agregar a mi repertorio. – Thanatos

3

ZeroMQ ayuda a reemplazar los zócalos.

Puede enviar un archivo completo en un solo comando.

Un ZMQ 'parte' se puede escribir en cualquier idioma principal y por un software impulsado por ZMQ dado, que no importa lo que el otro extremo escrito en

De su sitio:.

Proporciona conectores que transportan mensajes completos a través de varios transportes , como en proceso, entre procesos, TCP y multidifusión. Puede conectar tomas N-a-N con patrones como fanout, pub-sub, tarea distribución, y solicitud-respuesta.

Cuestiones relacionadas