def __init__(self, ip=HOST, port=PORT): """ initializing Args: ip: server ip port: server port """ if ClientModel.__instance != None: raise Exception("This class is a singleton!") else: ClientModel.__instance = self #log self.logger = MyLogger.getInstance("client.log") #server ip and port self.ip, self.port = ip, port #TCP socket建立 self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.connect((self.ip, self.port)) #建立锁 self.mutex = threading.Lock() #读取服务器公钥 with open("publicKey.pem", "r") as f: self.server_public_key = rsa.PublicKey.load_pkcs1( f.read().encode()) self.Crypto = ClientCrypto() self.Crypto.new_rsa(self.server_public_key) self.logger.info("client model initializd successfully...")
def handle(self): ''' handle request ''' #log self.logger = MyLogger.getInstance("server.log") #读取服务器私钥 with open("privateKey.pem", "r") as f: self.private_key = rsa.PrivateKey.load_pkcs1(f.read().encode()) #服务器加密管理 self.Crypto = ServerCrypto() self.Crypto.new_rsa(self.private_key) #服务器数据库管理 self.db = db(DB_NAME) self.db.create_user_table() #消息读取循环 while True: #接受客户端数据 data_spec, data_recv = self.recv_data() #若客户端断开则退出 if not data_recv: self.logger.info("client disconnected...") break #解密 data_recv = self.Crypto.decrypt(data_spec, data_recv) self.logger.info("server received (crypto removed) from client " + str(threading.current_thread()) + ": " + json.dumps(data_recv)) #客户端登陆处理 if data_recv["type"] == "req_login": self.handle_login(data_recv) elif data_recv["type"] == "req_stock_kline": self.handle_kline(data_recv) elif data_recv["type"] == "req_stock_detail": self.handle_detail(data_recv) elif data_recv["type"] == "req_stock_list": self.handle_list(data_recv) elif data_recv["type"] == "live_check": self.send_data("2", dict({"type": "live_check"})) else: self.send_data("2", dict({"type": "error"}))