[Tutor] A quicky example of writing a SocketServer application (fwd)

Danny Yoo dyoo@hkn.eecs.berkeley.edu
Sat, 10 Aug 2002 15:07:54 -0700 (PDT)


Doh; I meant to forward that off to tutor@python.org, not tutor@hkn.  My
apologies!

---------- Forwarded message ----------
Date: Sat, 10 Aug 2002 15:06:38 -0700 (PDT)
From: Danny Yoo <dyoo@hkn.eecs.berkeley.edu>
To: tutor@hkn.eecs.berkeley.edu
Cc: Rob Andrews <rob@jam.rr.com>
Subject: A quicky example of writing a SocketServer application

Hi Rob,

I'm starting to work with socket programming again, and thought this
example might be interesting to folks.

The standard library's 'SocketServer' module does have some documentation,
but it's quite dense, and doesn't come with a working example.  It looks a
lot more intimidating than it should be, but it's actually not too scary.
Here is a simple "echoing" server that repeats whatever is being sent to
it.  For example:


###
dyoo@einfall:~$ python echo_server.py 123456 &
[1] 3900
dyoo@einfall:~$ telnet localhost 123456
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
hello
HELLO
Connection closed by foreign host.
dyoo@einfall:~$ telnet localhost 123456
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
hi, this is a test
HI, THIS IS A TEST
Connection closed by foreign host.
###



###
"""A small example of using the SocketServer module."""

import SocketServer


class EchoRequestHandler(SocketServer.StreamRequestHandler):
    def handle(self):
        line = self.rfile.readline()
        self.wfile.write(line)

class UppercaseRequestHandler(SocketServer.StreamRequestHandler):
    def handle(self):
        line = self.rfile.readline()
        self.wfile.write(line.upper())


if __name__ == '__main__':
    import sys
    port = int(sys.argv[1])
##     tcpserver = SocketServer.TCPServer(('localhost', port),
##                                        EchoRequestHandler)
    tcpserver = SocketServer.TCPServer(('localhost', port),
                                       UppercaseRequestHandler)
    tcpserver.serve_forever()
###


I hope this helps!