登録ログイン・ケースでの適用の反射

11312 ワード

//業務ニーズ:登録登録ケースではクライアントとサービス側を構築し、登録アカウント、パスワードを実現し、登録を行う必要がある.以下、このケースの論理コードを簡単に述べる.1.まずクライアント
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Scanner;
public class Client {
    public static void main(String[] args) throws Exception {
        // 1.         
        Scanner sc = new Scanner(System.in);
        while(true){
            System.out.println("       ,1    ,2    ,3    ");
            String flag = sc.nextLine();
            if("3".equals(flag)){
                System.out.println("    !");
                break;
            }
            switch (flag) {
            case "1":
                registerAndLogin(sc, "1");
                break;
            case "2":
                registerAndLogin(sc, "2");
                break;
            default:
                System.out.println("    ,      ");
                break;
            }
        }   
    }
    private static void registerAndLogin(Scanner sc, String flag) throws Exception {
        // 1.            Socket  
        Socket s = new Socket("192.168.6.48", 8888);
        // 2.           
        //        
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        if(flag.equals("1")){
            bw.write("dealRegister");
        }
        else if(flag.equals("2")){
            bw.write("dealLogin");
        }
        bw.newLine();
        bw.flush();
        //            
        System.out.println("       :");
        String userName = sc.nextLine();
        bw.write(userName);
        bw.newLine();
        bw.flush();
        System.out.println("       :");
        String pwd = sc.nextLine();
        bw.write(pwd);
        bw.newLine();
        bw.flush();
        //          
        BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
        System.out.println(br.readLine());
        //        ,     
        s.close();
    }
}

2.サービス側
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Sever {
    public static void main(String[] args) throws Exception {
        // 1.      ServerSocket        
        ServerSocket ss = new ServerSocket(8888);
        //           
        while (true) {
            Socket s = ss.accept();
            //            
            new Thread(new DealRunnable(s)).start();
        }
    }
}

class DealClass {
    private String dealRegister(String userName, String pwd) {
        //               
        BufferedWriter bw = null;
        try {
            bw = new BufferedWriter(new FileWriter("D:/test.txt"));
            bw.write(userName);
            bw.newLine();
            bw.flush();
            bw.write(pwd);
            bw.newLine();
            bw.flush();
        } catch (IOException e) {
            e.printStackTrace();
            return "    ,   ";
        } finally {
            if (bw != null) {
                try {
                    bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return "    ";
    }
    private String dealLogin(String userName, String pwd) {
        //                 
        BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader("D:/test.txt"));
            String oldUserName = br.readLine();
            String oldPwd = br.readLine();
            if (oldUserName.equals(userName) && oldPwd.equals(pwd)) {
                return "    ";
            }
        } catch (Exception e) {
            e.printStackTrace();
            return "    ";
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return "    ,       ";
    }
}

3.サービス側DealRunnableクラス
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.lang.reflect.Method;
import java.net.Socket;

public class DealRunnable implements Runnable {
    private Socket s;
    public DealRunnable(Socket s){
        this.s = s;
    }
    @Override
    public void run() {
        try {
            //             ,      ,     
            BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
            //         
            String methodName = br.readLine();
            //        
            String userName = br.readLine();
            String pwd = br.readLine();
            //             
            DealClass dealClass = new DealClass();
            Class clazz = dealClass.getClass();
            Method method = clazz.getDeclaredMethod(methodName, String.class, String.class);
            method.setAccessible(true);//     
            String result = (String) method.invoke(dealClass, userName, pwd);
            System.out.println(result); 
            //          
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
            bw.write(result);
            bw.newLine();
            bw.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}