反射在注册登录案例中的应用
来源:互联网 发布:算法工程师培训班 编辑:程序博客网 时间:2024/05/17 23:55
//业务需求:注册登录案例中需要构建客户端和服务端,实现注册账号、密码并进行登录的要求,下面简述该案例的逻辑代码。
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(); } }}
0 0
- 反射在注册登录案例中的应用
- 用户注册登录案例
- 登录注册案例
- 用户登录注册案例
- android_MVPd登录注册案例
- 反射在Java中的应用
- 反射在android中的应用
- 反射应用案例一
- Java反射应用案例
- JavaWeb_mvc案例_注册登录
- 用户登录注册案例分析
- 用户注册和登录案例
- 用户登录注册案例分析
- 登录注册案例(集合实现)
- Servlet监听器在开发中的应用案例
- Servlet监听器在开发中的应用案例
- JAVA反射在STRUTS中的应用
- 反射在Java Swing中的应用
- CODEVS 1033 蚯蚓的游戏问题
- 算法提高 12-2扑克排序
- vue双向过滤器two-way
- Moses使用教程之安装
- 操作系统--进程间的通信,同步和互斥等
- 反射在注册登录案例中的应用
- 开发过程中碰到的信号处理场景--笔记
- K-Means聚类算法
- CMake使用总结
- IO之ByteInputStream ByteOutputStream
- 输出缓存区的内存分配
- 初始正则
- Leetcode 150 Evaluate Reverse Polish Notation (求值逆波兰表达式)
- MYSQL(6)数据操作2