Python Asyncore在客户端discon时执行handle\u read

2024-10-02 00:23:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python中使用asyncore的socket TCP服务器。我的句柄读取功能是:

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的bytes对象”

这表示在客户端断开连接时执行handle\ u read函数。 正常吗?我如何处理这种情况?你知道吗

非常感谢!你知道吗


Tags: selfreaddataasexceptiondeerrhandle
1条回答
网友
1楼 · 发布于 2024-10-02 00:23:01

这是个正常的电话。当对等方关闭其套接字(或者简单地用shuwr关闭它)时,read调用立即返回0字节。你知道吗

因此,您的handle_read应该为套接字上的文件结尾做好准备:

def句柄读取(自身):

...
if len(data) == 0: # EOF on input socket
    pass           # or add disconnection processing...
elif len(data) < 2:  #comandos digitais
    ...

相关问题 更多 >

    热门问题