【发布时间】:2011-10-13 18:57:26
【问题描述】:
我正在尝试通过套接字写入传输文件或数据块。我觉得我好像在重新发明轮子,但我对简单解决方案的搜索失败了(我发现的一切要么太简单,要么太复杂)。服务器将在运行 python 2.5.4 的手机上运行。预期的应用是在手机和主机之间同步音乐文件。
这是我所拥有的胆量,它似乎有效。我发送和接收“确定”以分解流。
基本上来回发送“ok”作为停止位来分解数据流是一种合理的技术吗?
有标准的方法吗?
鉴于手机内存和处理能力的限制,在手机上运行任何类型的库服务器(ftp、http)都不是一个有用的解决方案。
服务器:
import socket
c = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
c.bind(('', 1234))
c.listen(1)
s,a = c.accept()
while True:
data = s.recv(1024)
cmd = data[:data.find('\n')]
if cmd == 'get':
x, file_name, x = data.split('\n', 2)
s.sendall('ok')
with open(file_name, 'rb') as f:
data = f.read()
s.sendall('%16d' % len(data))
s.sendall(data)
s.recv(2)
if cmd == 'end':
s.close()
c.close()
break
客户:
import socket
s = socket.socket()
s.connect(('192.168.1.2', 1234))
def get_file(s, file_name):
cmd = 'get\n%s\n' % (file_name)
s.sendall(cmd)
r = s.recv(2)
size = int(s.recv(16))
recvd = ''
while size > len(recvd):
data = s.recv(1024)
if not data:
break
recvd += data
s.sendall('ok')
return recvd
print get_file(s, 'file1')
print get_file(s, 'file2')
s.sendall('end\n')
【问题讨论】:
-
好主意,但 http 服务器在手机上运行得相当糟糕。
标签: python sockets file-transfer