Передача файлов сокета Python

Я пытаюсь записать файлы передачи или фрагменты данных через сокет . Мне кажется, что я изобретаю колесо, но мои поиски простого решения не увенчались успехом (все, что я нашел, либо слишком просто, либо слишком сложно). Сервер будет работать на телефоне, на котором запущен 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')
10
задан foosion 26 July 2011 в 21:53
поделиться