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" ") logger.info("Received bytes: %s", data) if not data.endswith(b" "): data = data + b" " 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" ") while(1): x=s.recv(1024) if(x): print("server to client result:",x) s.close()