Сценарий клиентского Python не выполняет прерывание при получении данных с сервера - PullRequest
0 голосов
/ 05 мая 2019

Я попытался создать скрипт клиент-сервер для отправки и получения некоторых файлов.Сценарий заключается в том, что первоначально сервер автоматически отправляет клиенту файл csv, клиент обрабатывает файл и отправляет обратно файл ответов.

Когда я начинаю получать файл, я вижу все содержимое файла, но не делаюперерыв, чтобы перейти к следующей функции для отправки обратно файла ответов. Является ли проблема серверной части или клиента, или обоих?

Клиент

#GET THE WORK FILE
with open('received_file.csv', 'wb') as f:
    print ('file opened')
    while True:
        data = s.recv(BUFFER_SIZE)
        print('receiving data...')
        print('data=%s', (data))
        #data =''
        if not data:
            print('Successfully get the file')
            break

        f.write(data)
    f.close()

Только если я размещаю данные= '' это идет дальше, но сервер не должен отправлять пустой пакет данных?Это не будет работать, если полученный файл имеет размер буфера правильный?

Сервер

while True:
    print('Starting is ',starting)
    l = f.read(BUFFER_SIZE)
    while (l):
        self.sock.send(l)
        print('Sending..') 
        l = f.read(BUFFER_SIZE)
        if not l:
            f.close()
            starting = 0
            del filenames[0]
            print('Sending in over..')

            self.getfile()

1 Ответ

0 голосов
/ 05 мая 2019

Мне кажется, проблема в том, что команда break выходит из оператора if вместо цикла while , который вы намереваетесь прервать.

Вот возможное решение

Клиент

with open('received_file.csv', 'wb') as f:
        print ('file opened')
        while_loop_status=True
        while while_loop_status:
            data = s.recv(BUFFER_SIZE)
            print('receiving data...')
            print('data=%s', (data))
            if not data:
                print('Successfully get the file')
                while_loop_status=False
            f.write(data)
        f.close()

Здесь вы создаете переменную, которая определяет, следует ли продолжать цикл while с именем while_loop_status, затем вы меняете его с True на False, когда вынужно разорвать петлю.

...