如何在Python中在两台连接的计算机之间传输文件?
我不知道这个问题之前有没有人回答过(我在网上找过,但没找到),但是我想知道怎么能把一个文件(如果可以的话是.exe文件)通过网络发送到另一台连接在同一网络上的电脑上。我试过用套接字(sockets),但我只能发送字符串。我也尝试学习ftplib,但我完全不理解这个东西,甚至不知道FTP是不是我需要的,所以我现在完全卡住了。任何建议都很受欢迎(如果有人能解释一下FTP,那就更好了,它和套接字一样吗?我看到的所有例子都没有一个服务器程序让客户端可以连接。)
4 个回答
3
可以看看paramiko这个库。它可以用来做scp和sftp的操作。
11
A. Python3
我们可以用 http.server
来实现这个功能。根据这个回答,在 python3
中,SimpleHTTPServer
已经被移到了 http.server
。
python -m http.server
Python2:
我有时候会用 SimpleHTTPServer
来做这个:
python -m SimpleHTTPServer
...这会在8000端口上提供当前目录下的文件。你可以在另一台电脑上打开网页浏览器,下载你想要的任何东西。
要知道你电脑的IP地址,可以在Ubuntu中使用 ifconfig
,例如:
$ 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
在Windows中则是 ipconfig
。
然后,在另一台电脑上,你可以在浏览器中输入:http://10.0.0.3:8000。
B. 如果你启用了SSH,你可以使用paramiko来连接并通过SFTP传输你想要的任何东西。
7
这里有一些简单的示例代码,展示了发送方的操作:
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)