我需要逐字节地从套接字读取数据.我尝试使用此代码:
lineF = ''
for DataByte in client[0].recv(1):
lineF += DataByte
Run Code Online (Sandbox Code Playgroud)
结果lineF必须是数据字符串.
什么类型的对象是client[0]?假设它是socket标准库中的对象,那么recv()已经为您提供了一个字节串.如果你想把它作为文本字符串,你可以使用.decode()任何编码发送给你的数据正在使用的编码 - 例如,
data = client[0].recv(1).decode('utf-8')
Run Code Online (Sandbox Code Playgroud)
编辑:如果您根据以下评论提前知道流的长度,则需要继续阅读,直到数据恢复为空.内置iter()有助于此:
def read_socket():
return client[0].recv(1)
data = b''.join(iter(read_socket, b''))
Run Code Online (Sandbox Code Playgroud)
此外,如果这是一次读取一个字节的唯一原因 - 您可以并且可能应该使用更大的缓冲区大小.如果流中的字节数少于缓冲区可以容纳的字节数,那么它只会给你那些字节.
| 归档时间: |
|
| 查看次数: |
4690 次 |
| 最近记录: |