SocketServer class examples

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Adil Hasan

    #1

    SocketServer class examples


    Hello Fred,
    I just ran across your question. I think that the following
    code will work:

    ----- SERVER CODE ------
    import SocketServer
    import time
    class GreetingHandler (SocketServer.B aseRequestHandl er):
    '''Class to handle sending a greeting to a client
    '''
    def handle(self):
    '''Method to actually handle the greeting
    '''
    print 'handling the request'
    line = self.request.re cv(bufsize)
    name = ""
    if ('NAME:' in line):
    name = line.split('NAM E:')[1]
    self.request.se ndall('hello there %s \n' % name)

    def manageServer():
    '''Function to manage the running of the server and handling of
    requests
    '''
    servObj = SocketServer.TC PServer(('local host',6099),Gre etingHandler)
    print 'Starting the server...'
    servObj.serve_f orever()

    if __name__ == '__main__':
    manageServer()

    ----- CLIENT CODE -----
    #!/usr/bin/env python
    import socket
    def manageClient():
    '''Function to manage the sending of request to the server
    '''
    server = 'localhost'
    port = 6099
    servObj = socket.socket(s ocket.AF_INET, socket.SOCK_STR EAM)
    servObj.connect ((server, port))
    servObj.send('N AME: An Elephant\r\n')
    resp = servObj.recv(81 92)
    print resp
    servObj.close()

    if __name__ == '__main__':
    manageClient()



    I think that the problem with the rfile and wfile methods in the
    StreamRequestHa ndler class is that it's trying to send on the
    same socket as it's reading data on so they are blocking each
    other. I think that this is a problem in the StreamRequestHa ndler
    class.

    adil

    -----Original Message-----
    From: Frederick Grim [mailto:fgrim at norby.dyndns.or g]
    Sent: 18 July 2004 19:34
    To: python-list at python.org
    Subject: SocketServer class examples

    Howdy group,
    So I am in the middle of using the socketserver class from the std
    library and have run into a problem that probably reveals my
    misunderstandin g of sockets. I have a class defined like so:

    class tcp_listener(So cketServer.Thre adingTCPServer) :
    def __init__(self, addr, port):
    SocketServer.Th readingTCPServe r.__init__(self , \
    (addr, port), Daemon.request_ handler)

    """ Yes I realize the above is silly and redundant """

    And a request handler in Daemon that has a handle function that works like
    so:
    def __req_handle(se lf, req):
    """ Do stuff with req and return a response afterwards """
    return response

    def handle(self);
    while True:
    input = self.rfile.read line()
    request = input
    while input and not re.search('EOF$ ', input):
    input = self.rfile.read line()
    request += input

    self.wfile.writ e(self.__req_ha ndle(request))

    The client end looks almost identical to the example in the python docs.
    So
    the problem here is that this code doesn't work. Using tcpdump I can tell
    that the client is sending to the server properly but the server is never
    responding. Or when it tries to respond it gets stuck in the write.
    What's
    going on here. I can't seem to find a single example of how to use this
    class on the client and server side and I don't want to use twisted
    (because
    I should understand how this works instead of relying on canned software).
    Does anyone know where I can find an example of a functioning SocketServer
    and client? Google seems to help nought here.
    Thanks,
    Fred






Working...