逐字节读取套接字数据并作为字符串返回

时间:2012-02-10 12:08:21

标签: python sockets

我需要逐字节地从套接字读取数据。我尝试使用此代码:

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

结果lineF必须是数据字符串。

1 个答案:

答案 0 :(得分:5)

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''))

此外,如果这是一次读取一个字节的唯一原因 - 您可以并且可能应该使用更大的缓冲区大小。如果流中的字节数少于缓冲区可容纳的字节数,那么它只会给你那些字节。