[英]Python Asyncore executes handle_read when client disconnect
我是使用asyncore的python中的套接字TCP服务器。 我的handle_read函数是:
def handle_read(self):
data = self.recv(50)
'''interpretar os comandos:
operação: Ligar/Desligar Bomba, Ligar/Desligar Aquecedor, Alterar velocidade da bomba
Modo: trocar de modo automático para remoto
Armazenamento: ativar ou desativar o armazenamento de dados para o trend e
também apagar dados
'''
if len(data) < 2: #comandos digitais
try:
process_commands(data)
except Exception as err:
print(str(err))
else: #comando analogico
try:
ld = json.loads(data.decode('utf-8'))
bytescommand = pack('f',ld['pump_speed'])
bus.write_block_data(arduinoAddress,53,list(bytescommand))
except Exception as err:
print(str(err))
finally:
pass
看,我测试接收到的数据以执行功能。 但是,当客户端断开连接时,程序将返回:
“ char格式要求长度为1的字节对象”
这表明在客户端断开连接时执行handle_read函数。 这是正常的? 我如何处理这种情况?
非常感谢!
那是正常的电话。 当对等方关闭其套接字(或仅使用SH_WR将其关闭)时,读取调用立即返回0字节。
因此,您的handle_read
应该为套接字上的文件结尾做好准备:
def handle_read():
...
if len(data) == 0: # EOF on input socket
pass # or add disconnection processing...
elif len(data) < 2: #comandos digitais
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.