我用Swing画了后台 前台 服务器三个模块 用MVC实现的 我把M当成客户端向服务器发送信息并做处理后台和前台一样 在M里有N多功能 我是在每个功能里new的一个Socket怎么让一个人登录以后 一直保持一个socket 而不是每调一个方法就new一个?仅限于前台如果一个人在这里登录了,不退出就不能再其他地方登录,要怎么解决?

解决方案 »

  1.   

    给每个方法传一个socket参数;
    在用户表里加个字段,判断登录状态
      

  2.   

    抛出software caused connection abort:socket write error怎么回事?登陆时候没事 在调用Select方法时 就报错了
    public class AtmModel {    private AtmLogin atmLogin;
        private static Socket socket;
        private InputStream is;
        private OutputStream os;
        private ObjectInputStream ois;
        private ObjectOutputStream oos;
        private AccountInfo aif;
        private TransferData tfd;    public AtmModel() {
        }    
        S方法是点登陆按钮时调用的
        public void S() {
            try {
                socket = new Socket("127.0.0.1", 9900);
                os = socket.getOutputStream();
                oos = new ObjectOutputStream(os);
                is = socket.getInputStream();
                ois = new ObjectInputStream(is);
            } catch (UnknownHostException ex) {
                Logger.getLogger(AtmModel.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(AtmModel.class.getName()).log(Level.SEVERE, null, ex);
            }
        }    public void addAtmLogin(AtmLogin atmLogin) {
            this.atmLogin = atmLogin;
        }    //登陆验证
        public void addLoginChecking(String id, String pwd) {
            aif = new AccountInfo(id, pwd);
            tfd = new TransferData(3, aif);        try {
                oos.writeObject(tfd);
                tfd = (TransferData) ois.readObject();            if (tfd.getCmd() == 301) {
                    atmLogin.cutPage("card3");
                    atmLogin.noticLoginClear();
                } else {
                    JOptionPane.showMessageDialog(atmLogin, "登陆失败");
                }
            } catch (Exception e) {
                e.printStackTrace();
            } 
        }    public void Select() {
            aif = new AccountInfo();
            tfd = new TransferData(4, aif);        try {
                oos.writeObject(tfd);            tfd = (TransferData) ois.readObject();            if (tfd.getCmd() == 401) {
                    atmLogin.cutPage("card4");
                    atmLogin.showMoeny(((AccountInfo) tfd.getData()).getBalance());
                } else {
                    JOptionPane.showMessageDialog(atmLogin, "查询失败");
                }        } catch (Exception e) {
                e.printStackTrace();
            } 
        }