E aí pessoal, beleza?? Comecei a trabalhar agora com python, e tenho como tarefa fazer um simples comunicador, com um servidor e varios clientes, para que isso seja acoplado a um codigo maior posteriormente, mas estou com um pequeno probema, não consigo entender por que o seguinte codigo, entra em lopp infinito quando um cliente se desconecta sem ser por digitar "exit" (Ctrl + C no terminal por exemplo), alguém sabe me explicar por que a função handle_close() não está fazendo o que deveria, ou se eu que não entendi bem o que ela faz?
Obrigado!
#!/usr/bin/env python
import asyncore
import socket
class EchoHandler(asyncore.dispatcher_with_send):
def handle_read(self):
try:
data = self.recv(1024)
except:
handle_close(self)
if data== 'exit' :
self.close()
print ('Client off 1')
else: self.send(data)
def handle_close(self):
print('Cliente off 2')
self.close()
return 1
class EchoServer(asyncore.dispatcher):
def __init__(self, host, port):
asyncore.dispatcher.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.set_reuse_addr()
self.bind((host, port))
self.listen(5)
def handle_accept(self):
pair = self.accept()
if pair is None:
pass
else:
sock, addr = pair
print 'Incoming connection from %s' % repr(addr)
handler = EchoHandler(sock)
server = EchoServer('localhost', 8083)
asyncore.loop()
Pergunta
gameower
E aí pessoal, beleza?? Comecei a trabalhar agora com python, e tenho como tarefa fazer um simples comunicador, com um servidor e varios clientes, para que isso seja acoplado a um codigo maior posteriormente, mas estou com um pequeno probema, não consigo entender por que o seguinte codigo, entra em lopp infinito quando um cliente se desconecta sem ser por digitar "exit" (Ctrl + C no terminal por exemplo), alguém sabe me explicar por que a função handle_close() não está fazendo o que deveria, ou se eu que não entendi bem o que ela faz?
Obrigado!
#!/usr/bin/env python import asyncore import socket class EchoHandler(asyncore.dispatcher_with_send): def handle_read(self): try: data = self.recv(1024) except: handle_close(self) if data== 'exit' : self.close() print ('Client off 1') else: self.send(data) def handle_close(self): print('Cliente off 2') self.close() return 1 class EchoServer(asyncore.dispatcher): def __init__(self, host, port): asyncore.dispatcher.__init__(self) self.create_socket(socket.AF_INET, socket.SOCK_STREAM) self.set_reuse_addr() self.bind((host, port)) self.listen(5) def handle_accept(self): pair = self.accept() if pair is None: pass else: sock, addr = pair print 'Incoming connection from %s' % repr(addr) handler = EchoHandler(sock) server = EchoServer('localhost', 8083) asyncore.loop()Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.