March 2003
Intermediate to advanced
656 pages
39h 30m
English
set_terminator
x.set_terminator(terminator)Your class X normally
doesn’t override this method.
terminator is normally
'\r\n', the line terminator specified by most
Internet protocols. terminator can also be
None, to disable calls to
found_terminator.
Example 19-8 uses module asynchat
to reimplement the server of Example 19-7, with small
differences due to using class asynchat.async_chat
instead of class asyncore.dispatcher_with_send. To
highlight async_chat’s typical
use, Example 19-8 responds (by echoing the received
data back to the client, like all other server examples in this
chapter) only when it has received a complete line (i.e., one ending
with \n).
Example 19-8. Asynchronous TCP echo server using asynchat
import asyncore, asynchat, socket class MainServerSocket(asyncore.dispatcher): def __init_ _(self, port): print 'initing MSS' asyncore.dispatcher.__init_ _(self) self.create_socket(socket.AF_INET, socket.SOCK_STREAM) self.bind(('',port)) self.listen(5) def handle_accept(self): newSocket, address = self.accept( ) print "Connected from", address SecondaryServerSocket(newSocket) class SecondaryServerSocket(asynchat.async_chat): def __init_ _(self, *args): print 'initing SSS' asynchat.async_chat.__init_ _(self, *args) self.set_terminator('\n') self.data = [] def collect_incoming_data(self, data): self.data.append(data) def found_terminator(self): self.push(''.join(self.data)) self.data = [] def handle_close(self): print "Disconnected from", self.getpeername( ) ...Read now
Unlock full access