Я новичок в Python (я программировал в Java уже несколько лет), и я работаю над простым сетевым приложением на основе сокетов (просто для удовольствия). Идея состоит в том, что мой код подключается к удаленной конечной точке TCP, а затем прослушивает любые данные, передаваемые с сервера клиенту, и выполняет некоторые синтаксические разборки по этому вопросу.Чтение буфера сокета с использованием asyncore
Данные, перемещаемые с сервера -> клиент, кодируются в кодировке UTF-8, а каждая строка разделяется CRLF
(\x0D\x0A
). Вы, наверное, догадались: идея заключается в том, что клиент подключается к серверу (до его отмены пользователем), а затем считывает и анализирует строки по мере их поступления.
Мне удалось заставить это работать, Я не уверен, что я делаю это совершенно правильно. Итак, мои актуальные вопросы (код):
- Это правильный способ сделать это в Python (то есть это действительно так просто)?
- Любые советы/рекомендации/полезные ресурсы (кроме справочной документации) относительно буферов/
asyncore
?
В настоящее время данные считываются и буферном следующим образом:
def handle_read(self):
self.ibuffer = b""
while True:
self.ibuffer += self.recv(self.buffer_size)
if ByteUtils.ends_with_crlf(self.ibuffer):
self.logger.debug("Got full line including CRLF")
break
else:
self.logger.debug("Buffer not full yet (%s)", self.ibuffer)
self.logger.debug("Filled up the buffer with line")
print(str(self.ibuffer, encoding="UTF-8"))
ByteUtils.ends_with_crlf
функция просто проверяет последние два байта буфера для \x0D\x0A
. Первый вопрос является основным (на это основан ответ), но любые другие идеи/советы оценены. Благодарю.
Мне было любопытно, что такое ByteUtils в вашем коде, где я googled «python ByteUtils» ... и google дал мне эту тему - через 15 минут после ее создания! Thats впечатляет :) – truppo