Найти - Пользователи
Полная версия: Передача данных, клиенту приходит не строка а массив
Начало » Network » Передача данных, клиенту приходит не строка а массив
1
realivan
Добрый день.
Проблема такая: при передаче данных в виде строки (например, первый пакет “имя”, второй пакет “фамилия”) клиентам приходит массив из строк в виде одного пакета . Причем проблема появляется только тогда, когда клиентов более 1-го, и не постоянно.
# функция чтения сообщения
def read_package(sock, addr=''):
    if addr == '':
        addr = 'server'
    try:
        data = sock.recv(1024).decode('utf-8')
        if data != '>no':
            if '>no' in data:
                data = data.replace('>no', '')
            if data == '':
                data = '>no'
            data = data.split('$')
            l = []
            for k in data:
                if len(k) != 0:
                    l.append(k)
            data = l
            print("<--, '%s' от '%s'" %(data, addr))
    except:
        return None
    return data
# функция сервера передачи сообщения
def send_info(self, data = '', client = False):
        if not client:
            if not self.queue.empty():
                data = self.queue.get(block=False)
                Thread(target = process_data, args = (data,)).start()
        if data != '>no':
            data += '$'
            for s in self.sockets:
                if data != '':
                    s.send(data.encode('utf-8'))
                    print('-->, ', data)                
                else:
                    s.send('>no'.encode('utf-8'))
doza_and
realivan
например, первый пакет “имя”,
При передаче данных через сокеты нет понятия пакет. Сокет это потенциально бесконечный поток данных.Если нужны пакеты - вы должны сами разбираться где пакет начинается и кончается. Ваша проблема результат буферизации при передаче данных.
realivan
Ваша проблема результат буферизации при передаче данных.
Как можно это исправить?
doza_and
realivan
Как можно это исправить?
Или использовать более высокоуровневые протоколы. pympi, zeromq, pyro4 почти любая СУБД и т.п.
Или самому придумать протокол - Стартовые стоповые последовательности. Контроль целостности, восстановление при потере коннекта это похоже минимальные требования.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB