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

时间:2015-01-21 23:13:32

标签: python sockets python-2.7

基本上我正在创建一个应用程序,客户端会检查它是否有所需的文件,如果没有,它会从服务器下载它们。我想知道我是否能用Python的套接字模块做到这一点,如果是这样,我该怎么做呢?

1 个答案:

答案 0 :(得分:3)

简短回答:是的。

答案很长: 如果您控制两端,可能有更简单的方法。直接使用套接字是一种有点低级的方法,为了使工作更健壮,您需要设计一个协议来指定要请求的文件,具有指定长度的标头等等。

但是,通过网络传输文件是一个已经多次解决的问题,所以有几个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 -