@Override
    public void run() {
        System.out.println("MClient: run");
        Object obj = null;
        Data d = null;
        if (connect() == JHelp.OK) {
            while (true) {
                try {
                    try {
                        obj = input.readObject();
                        try {
                            if (server.getoutput() != null) {
                                server.getoutput().writeObject(obj);
                            } else {
                                output.writeObject(new Data(new Item("@@@notserverdb@@@")));
                                break;
                            }
                        } catch (IOException ex) {
                            throw ex;
                            //System.err.println(ex.getMessage() + " //cl1");
                        }
                        d = serverdbMsg();
                    } catch (ClassNotFoundException ex) {
                        //??????????????????????????????????????????????
                        System.err.println(ex.getMessage() + " //cl2");
                    } catch (Exception ex) {
                        //??????????????????????????????????????????????
                        System.err.println(ex.getMessage() + " //cl21");
                    }
                    System.out.println("Question: " + (((Data) obj).getKey().getItem()));
                    if (((Data) obj).getKey().getItem().equals("@@@exit@@@")) {
                        output.writeObject(new Data(new Item("@@@disconnect@@@")));
                        clientSocket.close();
                        break;
                    } else {
                        output.writeObject(d);
                    }
                } catch (IOException ex) {
                    //?????????????????????????????????????????????????????
                    System.err.println(ex.getMessage() + " //cl3");
                    break;
                }
            }
        }
    }