1#!/usr/bin/env python 2 3import logging 4from tornado.ioloop import IOLoop 5from tornado import gen 6from tornado.iostream import StreamClosedError 7from tornado.tcpserver import TCPServer 8from tornado.options import options, define 9 10define("port", default=9888, help="TCP port to listen on") 11logger = logging.getLogger(__name__) 12 13 14class EchoServer(TCPServer): 15 @gen.coroutine 16 def handle_stream(self, stream, address): 17 while True: 18 try: 19 data = yield stream.read_until(b"\n") 20 logger.info("Received bytes: %s", data) 21 if not data.endswith(b"\n"): 22 data = data + b"\n" 23 yield stream.write(data) 24 except StreamClosedError: 25 logger.warning("Lost client at host %s", address[0]) 26 break 27 except Exception as e: 28 print(e) 29 30 31if __name__ == "__main__": 32 options.parse_command_line() 33 server = EchoServer() 34 server.listen(options.port) 35 logger.info("Listening on TCP port %d", options.port) 36 IOLoop.current().start() 37