38 lines
1.3 KiB
Python
Executable File
38 lines
1.3 KiB
Python
Executable File
#!/usr/bin/env python
|
|
"""Simple server that listens on port 16000 and echos back every input to the client.
|
|
|
|
Connect to it with:
|
|
telnet 127.0.0.1 16000
|
|
|
|
Terminate the connection by terminating telnet (typically Ctrl-] and then 'quit').
|
|
"""
|
|
from __future__ import print_function
|
|
from gevent.server import StreamServer
|
|
|
|
|
|
# this handler will be run for each incoming connection in a dedicated greenlet
|
|
def echo(socket, address):
|
|
print('New connection from %s:%s' % address)
|
|
socket.sendall(b'Welcome to the echo server! Type quit to exit.\r\n')
|
|
# using a makefile because we want to use readline()
|
|
rfileobj = socket.makefile(mode='rb')
|
|
while True:
|
|
line = rfileobj.readline()
|
|
if not line:
|
|
print("client disconnected")
|
|
break
|
|
if line.strip().lower() == b'quit':
|
|
print("client quit")
|
|
break
|
|
socket.sendall(line)
|
|
print("echoed %r" % line)
|
|
rfileobj.close()
|
|
|
|
if __name__ == '__main__':
|
|
# to make the server use SSL, pass certfile and keyfile arguments to the constructor
|
|
server = StreamServer(('127.0.0.1', 16000), echo)
|
|
# to start the server asynchronously, use its start() method;
|
|
# we use blocking serve_forever() here because we have no other jobs
|
|
print('Starting echo server on port 16000')
|
|
server.serve_forever()
|