mirror of
https://github.com/python/cpython.git
synced 2024-11-24 18:34:43 +08:00
f3ee46b82a
needed on some platforms (e.g. Solaris 8) when the test is run twice in quick succession.
59 lines
1.4 KiB
Python
59 lines
1.4 KiB
Python
# 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()
|