home *** CD-ROM | disk | FTP | other *** search
- # test asynchat -- requires threading
-
- import thread # If this fails, we can't test this module
- import asyncore, asynchat, socket, threading, time
-
- HOST = "127.0.0.1"
- PORT = 54321
-
- class echo_server(threading.Thread):
-
- def run(self):
- sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
- sock.bind((HOST, PORT))
- sock.listen(1)
- conn, client = sock.accept()
- buffer = ""
- while "\n" not in buffer:
- data = conn.recv(10)
- if not data:
- break
- buffer = buffer + data
- while buffer:
- n = conn.send(buffer)
- buffer = buffer[n:]
- conn.close()
- sock.close()
-
- class echo_client(asynchat.async_chat):
-
- def __init__(self):
- asynchat.async_chat.__init__(self)
- self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
- self.connect((HOST, PORT))
- self.set_terminator("\n")
- self.buffer = ""
-
- def handle_connect(self):
- print "Connected"
-
- def collect_incoming_data(self, data):
- self.buffer = self.buffer + data
-
- def found_terminator(self):
- print "Received:", `self.buffer`
- self.buffer = ""
- self.close()
-
- def main():
- s = echo_server()
- s.start()
- time.sleep(1) # Give server time to initialize
- c = echo_client()
- c.push("hello ")
- c.push("world\n")
- asyncore.loop()
-
- main()
-