2012-01-04 97 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,任务 分发和请求回复等模式。

相关问题