Форум сайта python.su
Добрый день.
Проблема такая: при передаче данных в виде строки (например, первый пакет “имя”, второй пакет “фамилия”) клиентам приходит массив из строк в виде одного пакета . Причем проблема появляется только тогда, когда клиентов более 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'))
Отредактировано realivan (Авг. 15, 2015 11:14:28)
Прикреплённый файлы:
1.jpg (113,8 KБ)
Офлайн
realivanПри передаче данных через сокеты нет понятия пакет. Сокет это потенциально бесконечный поток данных.Если нужны пакеты - вы должны сами разбираться где пакет начинается и кончается. Ваша проблема результат буферизации при передаче данных.
например, первый пакет “имя”,
Отредактировано doza_and (Авг. 15, 2015 17:35:02)
Офлайн
Ваша проблема результат буферизации при передаче данных.Как можно это исправить?
Офлайн
realivanИли использовать более высокоуровневые протоколы. pympi, zeromq, pyro4 почти любая СУБД и т.п.
Как можно это исправить?
Отредактировано doza_and (Авг. 15, 2015 20:52:52)
Офлайн