我在流中收到了几条二进制消息。每个都根据消息中的ID和长度进行解析。我想阅读所有发送的消息;但是,如果我尝试接收的字节多于已发送的字节数,程序会挂起,直到先前设置的socket.settimeout()。
我想怎么处理这个:
while end_of_file == 0:
header = socket.recv(6)
if header == '':
end_of_file = 1
不起作用,因为它总是需要6个字节。
答案 0 :(得分:3)
你自己说:
如果我尝试接收的字节多于已发送的字节数,程序将挂起
如果套接字在阻止模式下运行(这是默认设置),那么您所描述的是正常行为。你告诉它要阅读,它等待新数据到来。
如果你不想让它永远等待,你必须:
调用socket.settimeout()
然后处理timeout
异常(如果在阅读期间发生)。
使用select.select()
检测套接字何时有未决数据要读取,然后再调用socket.recv()
进行读取。
答案 1 :(得分:2)
除非服务器告诉它,否则客户端不会知道服务器没有发送更多数据。这意味着