0

我是使用 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 函数。这是正常的?我如何处理这种情况?

非常感谢!

4

1 回答 1

0

那是正常的通话。当对等方关闭其套接字(或简单地使用 SH_WR 将其关闭)时,读取调用立即返回 0 字节。

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

def 句柄读取(自我):

...
if len(data) == 0: # EOF on input socket
    pass           # or add disconnection processing...
elif len(data) < 2:  #comandos digitais
    ...
于 2017-11-24T15:19:40.107 回答