Pregunta

¿Hay una manera de comprobar la conexión está establecida en asyncore?

Una vez asyncore.loop () se llama, ¿cómo puedo desconectar la comunicación entre el servidor?

¿Puedo simplemente llamar a close ()?

¿Fue útil?

Solución

Una vez asyncore.loop () se llama, el control es entregado a bucle de eventos que se ejecuta.

Cualquier código después de la asyncore.loop () se llamará sólo después de que el ciclo de eventos se ha cerrado.

bucle de eventos va a reaccionar a diversos eventos y manejadores de las llamadas. Para cerrar el bucle de eventos, debe llamar a una parada en uno de los controladores de eventos donde tiene sentido.

Por ejemplo: Tome una mirada en el siguiente ejemplo.

Código de: http://www.mechanicalcat.net/richard/log/Python / A_simple_asyncore__echo_server__example

import asyncore, socket

class Client(asyncore.dispatcher_with_send):
    def __init__(self, host, port, message):
        asyncore.dispatcher.__init__(self)
        self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
        self.connect((host, port))
        self.out_buffer = message

    def handle_close(self):
        self.close()

    def handle_read(self):
        print 'Received', self.recv(1024)
        self.close()

c = Client('', 5007, 'Hello, world')
asyncore.loop()

self.close se llama dentro de uno de los controladores de eventos - handle_read. En este caso, después de que los datos se han recibido del servidor. se desconecta.

Referencias:

Otros consejos

¿Hay una manera de comprobar la conexión está establecida en asyncore?

Uso con tomas de corriente, que puede sobrecargar handle_connect () método de asyncore.dispatcher para funcionar cuando se conecta socket:

import asyncore

class MyClientConnection(asyncore.dispatcher):
    def handle_connect(self):
        '''Socket is connected'''
        print "Connection is established"

Si prefiere votación, leer la variable conexión en su asyncore.dispatcher:

myclient = MyClientConnection()
isConnected = myClient.connected
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top