tornado tcp 框架 demo
server
#!/usr/bin/env python import logging from tornado.ioloop import IOLoop from tornado import gen from tornado.iostream import StreamClosedError from tornado.tcpserver import TCPServer from tornado.options import options, define define("port", default=9888, help="TCP port to listen on") logger = logging.getLogger(__name__) class EchoServer(TCPServer): @gen.coroutine def handle_stream(self, stream, address): while True: try: data = yield stream.read_until(b"\n") logger.info("Received bytes: %s", data) if not data.endswith(b"\n"): data = data + b"\n" logger.info(data) yield stream.write(data) except StreamClosedError: logger.warning("Lost client at host %s", address[0]) break except Exception as e: print(e) if __name__ == "__main__": options.parse_command_line() server = EchoServer() server.listen(options.port) logger.info("Listening on TCP port %d", options.port) IOLoop.current().start()
client
# -*- coding: utf-8 -*- import socket import json import time def assemble(data): return json.dumps(data) host="127.0.0.1" port=9888 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect((host,port)) data={"req":"get","obj":"ver","seq":1,"param":{}} message=assemble(data) s.send(message.encode("utf-8")+b"\n") while(1): x=s.recv(1024) if(x): print("server to client result:",x) s.close()