2012-01-04 63 views
5

我不知道這是否已被回答(我在網上查找,但找不到),但我怎麼能發送一個文件(如果可能的話)通過網絡到另一臺連接到網絡的計算機?我嘗試過套接字,但是我只能發送字符串,並且我試圖學習ftplib,但是我根本不明白它,或者如果ftp甚至是我正在尋找的,所以我處於完全停頓狀態。任何輸入是讚賞的(更有甚者,如果有人可以解釋FTP,它是否像套接字?我見過的所有例子都沒有服務器程序,客戶端可以連接到)如何在python中的兩臺連接的計算機之間傳輸文件?

+2

當然可以用普通套接字來做到這一點。你嘗試了什麼? – 2012-01-04 04:12:22

+0

你應該只使用'scp'甚至是'rsync' + – wim 2012-01-04 04:18:59

回答

5

爲發送方的一些簡單的例子代碼:

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

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

     packet = f.read(blocksize) 

其中:

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

好的謝謝,那麼FTP不需要嗎?我仍然沒有真正明白它的用途 – Baboon 2012-01-04 22:42:30

+1

@Baboon - FTP是一個專門的文件傳輸協議,是的。它包含客戶端/服務器達成的許多便利 - 確認,狀態更新,重試,併發等。您可以閱讀RFC中的完整規範:https://www.ietf.org/rfc/rfc959.txt。但是,FTP並不是傳輸文件的唯一方式,使用套接字傳輸數據絕對有可能。通常,服務器和客戶端需要就詞彙/對話達成一致,並知道如何就文件完全傳輸達成一致。 – 2012-01-04 23:19:42

6

A.我使用SimpleHTTPServer這有時會:

python -m SimpleHTTPServer 

...這將成爲該文件在當前目錄在端口8000打開任何你想要的其他計算機和下載的Web瀏覽器。

要知道你的計算機的IP地址,你可以使用(在Ubuntu)的ifconfig,e.g:

$ 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 

然後在另一臺計算機,您發送的瀏覽器:http://10.0.0.3:8000

B.如果您啓用了SSH,您可以使用paramiko連接和SFTP傳輸任何你想要的。

+0

+1來加入你剛添加到我的曲目中的寶貴知識! – Thanatos 2012-01-04 05:06:59

3

ZeroMQ有助於更換插座。

您可以用一個命令發送整個文件。

一個ZMQ「黨」可以用任何一種主要語言和給定ZMQ驅動軟件,它不事關什麼的另一端是寫着

從他們的網站:。

它爲您提供了套接字,這些套接字可以在各種不同的傳輸中傳輸整個消息,如進程內,進程間,TCP和組播。您可以使用 將套接字N對N連接到fanout,pub-sub,任務 分發和請求回覆等模式。

相關問題