是否可以通过 Python 的套接字模块发送文件和/或文件夹?

Is it Possible to Send a File And or Folder Over Python's Socket Module?

本质上我是在做一个应用程序,客户端检查它是否有需要的文件,如果没有它从服务器下载它们。我想知道我是否可以使用 Python 的套接字模块来做到这一点,如果可以,我该如何做这些事情?

简答:是的。

长答案: 如果您可以控制两端,则可能有更简单的方法来做到这一点。直接使用套接字是一种有点 low-level 的方法,并且为了使事情稳健地工作,您需要设计一个协议来指定要请求的文件,headers 指定长度等。

但是,通过网络传输文件是一个已经解决了很多次的问题,因此有几个 python 模块可以使用大量已经开发的协议以更少的代码为您完成这项工作。

例如,以 HTTP 作为后端,requests module 模块可以让你做这样的事情:

r = requests.get('http://myserver/somefile.txt')
f = open('local_file_name.txt', w)
f.write(r.content)
f.close()

还有 python 模块可以用很少的代码设置一个非常简单的 HTTP 服务器。

看这里的一个例子(这实际上不需要写任何代码): http://www.linuxjournal.com/content/tech-tip-really-simple-http-server-python

结合两者的简单测试。假设 Linux,相同的基本原则适用于 windows。打开两个控制台:

控制台 1:

$ cd ~
$ mkdir http_test_server
$ cd http_test_server
$ echo "Hello World" > test_file.txt
$ python -m SimpleHTTPServer 8080 

控制台 2:

$ python
>>> import requests
>>> import requests
>>> r = requests.get('http://localhost:8080/test_file.txt')
>>> r.content
'Hello World\n'

在控制台 2 中执行 运行 命令后,您应该会在控制台 1 中看到如下输出:

127.0.0.1 - - [22/Jan/2015 10:42:54] "GET /test_file.txt HTTP/1.1" 200 -