problem with async_chat

rix kwiordache at kriocoucke.mailexpire.com
Thu Nov 3 06:41:11 EST 2005


Hi there,
I am writing an application that requires a client-server interaction.
Looking up on the internet and working on it I came up with something
like this:
a class ADFSServer that takes inbound connections and dispatches them
to ADFSReceiver.
The connection is always initialized by ADFSSender.
here is the code:

import asynchat
import asyncore
import socket
import string

class ADFSServer (asyncore.dispatcher):

    def __init__ (self, port):
        asyncore.dispatcher.__init__ (self)
        self.create_socket (socket.AF_INET, socket.SOCK_STREAM)
        self.set_reuse_addr()
        here = ('', port)
        self.bind (here)
        self.listen (1)

    def handle_accept (self):
        print ("Server is accepting connection")
        ADFSReceiver (self, self.accept())

class ADFSReceiver (asynchat.async_chat):

    channel_counter = 0

    def __init__ (self, server, (conn, addr)):
        asynchat.async_chat.__init__ (self, conn)
        self.set_terminator ('\n')
        self.server = server
        self.id = self.channel_counter
        self.channel_counter = self.channel_counter + 1
        self.buffer = ''
        print ("Receiver created")

    def collect_incoming_data (self, data):
        self.buffer.append(data)
        print ("collecting data")

    def found_terminator (self):
        data = self.buffer
        self.buffer = ''
        print '[Received Message]\n %s' % (self.id, repr(data))
        self.close()
        return data

    def handle_close (self):
        print 'Closing receiver'
        self.close()

class ADFSSender (asynchat.async_chat):

    def __init__ (self, data, address):
        print "creating sender"
        asynchat.async_chat.__init__ (self)
        #self.set_terminator ("\n")
        self.create_socket (socket.AF_INET, socket.SOCK_STREAM)
        self.connect (address)
        self.push(data)
        self.push ("\n")

if __name__ == '__main__':
    work1 = ADFSServer (1234)
    asyncore.loop()


I start the server on a shell, and from another shell I launch the
ADFSSender.
The problem is that if I use the push() function the code doesn't work.
If I use the send() it works.
As I am using the async_chat class, I would like to use the push()
method, so I was wondering what was the problem with my code...

thanks,
rix




More information about the Python-list mailing list