逐字节读取套接字数据,并以字符串形式返回

Read socket data byte by byte and return as a string

提问人:Sir D 提问时间:2/10/2012 最后编辑:ChrisSir D 更新时间:2/10/2012 访问量:5819

问:

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

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

result 必须是数据字符串。lineF

Python 套接字

评论


答:

7赞 lvc 2/10/2012 #1

什么类型的对象?假设它是标准库中的对象,那么已经给你一个字节。如果你想把它作为一个文本字符串,你可以使用任何编码,无论谁向你发送数据 - 例如,client[0]socketrecv().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''))

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

评论

0赞 Sir D 2/10/2012
是的。recv() 给了我一个字节。我可以使用 client[0].recv(1024) 获取整个字符串,但我不会知道字符串长度。它可能是多种多样的。我需要逐字节获取所有数据,然后获取一个字节。