• 【Java】仿真qq尝试:用户注册(二)


    参考:

    1、corejavaI:使用解耦的try/catch与try/finally 

    2、Java中try catch finally语句中含有return语句的执行情况(总结版):http://blog.csdn.net/ns_code/article/details/17485221

    3、什么时候考虑使用静态方法?http://tonylian.iteye.com/blog/563457(*详细)

    4、流与文件(端口 & 文件读写对象)

    思路:

    成功注册-->客户端调用Register()方法--->服务器调用save()方法,save用jdbc写。

    代码:

    1、服务器待命。

    package com.xkfx.qq.server;
    
    import com.xkfx.qq.tools.serverOnly.Database;
    import com.xkfx.qq.tools.transmit.User;
    
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    class RegisterServer {
        public static void main(String[] args) throws IOException {
            ServerSocket server = new ServerSocket(8000);
    
            while (true) {
                Socket socket = server.accept();
                invoke(socket);
            }
        }
    
        private static void invoke(final Socket socket) throws IOException {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    ObjectInputStream in = null;
                    PrintWriter out = null;
                    try {
                        in = new ObjectInputStream(socket.getInputStream());
                        out = new PrintWriter(socket.getOutputStream());
    
                        Object obj = in.readObject();
                        User user = (User)obj;
    
                        if (Database.find(user.getUsername())) {
                            out.write("这个ID已经被注册了");
                        } else {
                            Database.saveUser(user);
                            out.write("注册成功");
                        }
                        out.flush();
                    } catch (IOException e) {
                        e.printStackTrace();
                    } catch (ClassNotFoundException ex) {
                        ex.printStackTrace();
                    } finally {
                        try {
                            in.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        out.close();
                        try {
                            socket.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }).start();
        }
    }

    2、客户端注册

            // 用户点击了注册
            if (e.getActionCommand().equals("Sign up")) {
                // 从JTextField获取用户名和密码
                String username = txtUsername.getText();
                String password = txtPassword.getText();
    
                // 本地验证用户名、用户密码的合法性
                if (Check.idAndPass(username, password)) {
                    User user = new User(username, password);
                    JOptionPane.showMessageDialog(this, Server.Register(user));
                } else {
                    // 提示用户重新输入
                    JOptionPane.showMessageDialog(this, "输入不合法,请重新输入!");
                }
            }
    package com.xkfx.qq.tools.transmit;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.ObjectOutputStream;
    import java.net.Socket;
    
    public class Server {
        // 注册
        public static String Register(User user){
            Socket socket = null;
            ObjectOutputStream out = null;
            BufferedReader in = null;
    
            try {
                socket = new Socket("localhost", 8000);
                out = new ObjectOutputStream(socket.getOutputStream());
                in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    
                out.writeObject(user);
                out.flush();
    
                return in.readLine();
            } catch (Exception e) {
                e.printStackTrace();
                return "连接服务器失败";
            } finally {
                try {
                   socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

     后续:

    1、发现一个bug,貌似是由于catch里面不能有return造成的。。。

  • 相关阅读:
    关于oracle的一些操作
    关于List的一些操作
    XSS挑战赛(2)
    阿里云图床搭建
    XSS挑战赛(1)
    Shiro remeberMe反序列化漏洞复现(Shiro-550)
    HTTP慢速拒绝服务攻击(Slow HTTP Dos)
    从Excel获取整列内容进行批量扫描
    PHP代码审计分段讲解(14)
    PHP代码审计分段讲解(13)
  • 原文地址:https://www.cnblogs.com/xkxf/p/6783088.html
Copyright © 2020-2023  润新知