Читать данные сокета побайтово и возвращать в виде строки - PullRequest
2 голосов
/ 10 февраля 2012

Мне нужно читать данные из байта сокета за байтом.Я пытаюсь сделать с этим кодом:

lineF = ''
for DataByte in client[0].recv(1):
    lineF += DataByte

результат lineF должна быть строка данных.

1 Ответ

5 голосов
/ 10 февраля 2012

Какой тип объекта client[0]? Если предположить, что это объект socket из стандартной библиотеки, то recv() уже дает вам строку байта. Если вы хотите использовать его как текстовую строку, вы должны использовать .decode() с любой кодировкой, которую использует тот, кто отправляет вам данные - например,

 data = client[0].recv(1).decode('utf-8')

РЕДАКТИРОВАТЬ: в случае, если, согласно вашему комментарию ниже, вы не знаете длину потока заранее, вам нужно продолжать чтение, пока данные не вернутся пустыми. В этом помогает встроенный iter():

 def read_socket():
      return client[0].recv(1)

 data = b''.join(iter(read_socket, b''))

Кроме того, если это единственная причина для чтения байта за раз - вы можете и, вероятно, должны использовать больший размер буфера. Если в потоке меньше байтов, чем может вместить буфер, он просто выдаст эти байты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...