登録ログイン・ケースでの適用の反射
11312 ワード
//業務ニーズ:登録登録ケースではクライアントとサービス側を構築し、登録アカウント、パスワードを実現し、登録を行う必要がある.以下、このケースの論理コードを簡単に述べる.1.まずクライアント
2.サービス側
3.サービス側DealRunnableクラス
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();
}
}
}