2012-01-04 12 views
5

Nie wiem, czy na to odpowiedziano wcześniej (przeglądałem, ale nie mogłem znaleźć), ale jak mogę wysłać plik (.exe, jeśli to możliwe) przez sieć do innego komputera podłączonego do sieci ? Próbowałem gniazda, ale mogłem tylko wysyłać ciągi i próbowałem nauczyć się ftplib, ale nie rozumiem go w ogóle lub jeśli ftp jest nawet tym, czego szukam, więc jestem w całkowitym zawieszeniu. Dowolne wejście jest doceniane (tym bardziej, że ktoś może wyjaśnić FTP, czy jest to podobne gniazdo? Wszystkie przykłady, które widziałem, nie mają programu serwera, z którym klient może się połączyć.)Jak przenieść plik między dwoma podłączonymi komputerami w pythonie?

+2

Z pewnością można to zrobić ze zwykłymi gniazdami. Co próbowałeś? –

+0

Powinieneś po prostu użyć 'scp' lub nawet' rsync' – wim

Odpowiedz

5

Niektóre uproszczony przykład kodu dla strony wysyłającej:

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

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

     packet = f.read(blocksize) 

Gdzie:

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 dzięki, więc czy FTP nie jest potrzebny? Wciąż nie do końca rozumiem, do czego służy – Baboon

+1

@Baboon - FTP jest wyspecjalizowanym protokołem do transferu plików, tak. Zawiera szereg udogodnień, z którymi zgadzają się klienci/serwery - potwierdzenia, aktualizacje statusu, ponowienia, współbieżność itp. Możesz przeczytać całą specyfikację tego RFC: https://www.ietf.org/rfc/rfc959.txt.Jednak FTP nie jest jedynym sposobem na przesłanie pliku, a korzystanie z gniazd do transmisji danych jest zdecydowanie możliwe. Zwykle Serwer i Klient muszą uzgodnić słownictwo/dialog i wiedzieć, w jaki sposób uzgodnić, kiedy plik został w całości przesłany. –

6

A. Używam SimpleHTTPServer za to czasami:

python -m SimpleHTTPServer 

... który służyłby pliki w bieżącym katalogu na porcie 8000. Otwórz przeglądarkę internetową na innym komputerze i pobrać co chcesz.

znać adres IP komputera, można użyć (w Ubuntu) ifconfig, np:

$ 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 

Następnie w drugim komputerze, wysłać do przeglądarki: http://10.0.0.3:8000.

B. Jeśli masz włączone SSH, możesz użyć paramiko do połączenia i przesyłania SFTP, co chcesz.

+0

+1 dla dwóch cennych elementów wiedzy, które właśnie dodałeś do mojego repertuaru! – Thanatos

3

ZeroMQ pomaga zastąpić gniazd.

Możesz wysłać cały plik w jednym poleceniu.

A ZMQ „partia” mogą być napisane we wszystkich ważnych języku i dla danego ZMQ-powered oprogramowania, to nie robi sprawy, co drugi koniec napisane w

z ich strony.

Daje gniazda, które przenoszą całe wiadomości między różnymi transportami, takimi jak: proces, inter-proces, TCP i multiemisja. Możesz podłączyć gniazda N-to-N za pomocą wzorców takich jak fanout, pub-sub, zadanie dystrybucji i request-reply.

Powiązane problemy