繁体   English   中英

客户端断开连接时,Python Asyncore执行handle_read

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM