On Fri, Oct 3, 2008 at 2:13 AM, Daniel <[EMAIL PROTECTED]> wrote: > Hello, > > I can't seem to get my sockets code to work right. Here is what I > have inside my RequestHandler handle() function: > > total_data=[] > > data = True > logger_server.debug(self.__class__.__name__ + ' set data = > True') > while data: > logger_server.debug(self.__class__.__name__ + ' receive > first readline() of data') > data = self.rfile.readline().strip() > logger_server.debug(self.__class__.__name__ + ' first > readline() of data = %s' % data) > total_data.append(data) > receivedCommand = '\n'.join(total_data) > > And this is what I have inside my client code > > sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) > sock.connect(('localhost',5001)) > > sock.sendall('Hello, world\r\n') > data = sock.recv(1024) > sock.close() > print 'Received', repr(data) > > There's a little more to it, but this is enough for me to ask my > question. The problem is that I can't get the server loop (while > data:) to stop without closing the connection, but I want to receive > something back from the server before closing the sockets connection. > My logs show that the server never leaves the loop. > > Thanks in advance.
Daniel, You really should use an existing framework to help you write your application here. You're using the plain old (standard-library) sockets module. I would suggest you use either Twisted, or pymills. Twisted is more feature-rich, and a general purpose event-driven framework. It can be a little overwhelming to use. pymills is my event-driven, component architecture library that allows you to build event-driven systems very easily with a component design. You can download pymills from here: http://hg.shortcircuit.net.au/index.wsgi/pymills/archive/tip.tar.gz Or you can get the latest developmen branch by using Mercurial and cloning it: hg clone http://hg.shortcircuit.net.au/index.wsgi/pymills/ Here is a simple EchoServer that you could modify to suit your application needs: <code> #!/usr/bin/env python from pymills import event from pymills.event import * from pymills.net.sockets import TCPServer class Echo(TCPServer): @listener("read") def onREAD(self, sock, data): self.write(sock, data) def main(): echo = Echo(8000) event.manager += echo while True: try: manager.flush() echo.poll() except KeyboardInterrupt: break if __name__ == "__main__": main() </code> cheers James -- -- -- "Problems are solved by method" -- http://mail.python.org/mailman/listinfo/python-list