提问人:Sir D 提问时间:2/10/2012 最后编辑:ChrisSir D 更新时间:2/10/2012 访问量:5819
逐字节读取套接字数据,并以字符串形式返回
Read socket data byte by byte and return as a string
问:
我需要逐字节从套接字中读取数据。我尝试使用此代码:
lineF = ''
for DataByte in client[0].recv(1):
lineF += DataByte
result 必须是数据字符串。lineF
答:
7赞
lvc
2/10/2012
#1
什么类型的对象?假设它是标准库中的对象,那么已经给你一个字节。如果你想把它作为一个文本字符串,你可以使用任何编码,无论谁向你发送数据 - 例如,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''))
此外,如果这是一次读取一个字节的唯一原因 - 您可以而且可能应该使用更大的缓冲区大小。如果流中的字节数少于缓冲区可以容纳的字节数,则它只会为您提供这些字节数。
评论
0赞
Sir D
2/10/2012
是的。recv() 给了我一个字节。我可以使用 client[0].recv(1024) 获取整个字符串,但我不会知道字符串长度。它可能是多种多样的。我需要逐字节获取所有数据,然后获取一个字节。
评论