Я пытаюсь записать файлы передачи или фрагменты данных через сокет . Мне кажется, что я изобретаю колесо, но мои поиски простого решения не увенчались успехом (все, что я нашел, либо слишком просто, либо слишком сложно). Сервер будет работать на телефоне, на котором запущен python 2.5.4. Предполагаемое приложение будет синхронизировать музыкальные файлы между телефоном и главным компьютером.
Это внутренняя часть того, что у меня есть, и похоже, что это работает. Я отправляю и получаю «ОК», чтобы разбить потоки.
Отправляет «ОК» 'вперед и назад, по сути, как стоповые биты для разделения потоков данных - разумный метод?
Есть ли стандартный способ сделать это?
Запуск любого библиотечного сервера (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')