package register;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Properties;
/**
* 配置文件工具类
* @author Lenovo
*
*/
public class ProUils {
public static final String PATH = "E:\\java资料\\2105\\user.properties";
/**
* 保存数据到配置文件
* @param key
* @param value
*/
public static void savePro(String key,String value) {
//1创建properties对象集合
Properties pro = new Properties();
try {
//2setProperty(key, value)添加数据 添加键和值
pro.setProperty(key, value);
//3store 保存添加进来的数据,true表示追加 FileOutputStream输出流
pro.store(new FileOutputStream(PATH,true), "");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
/**
* 读取配置文件
* @return
*/
public static Properties getPro() {
//创建Properties对象集合
Properties pro = new Properties();
try {
//load加载 通过输入流读取配置文件
pro.load(new FileInputStream(PATH));
//返回pro配置文件对象
return pro;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
//没有读取到文件就返回空
return null;
}
}
package register;
public class User {
private String id;
private String name;
private String pwd;
private int age;
private double score;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public User(String id, String name, String pwd, int age, double score) {
super();
this.id = id;
this.name = name;
this.pwd = pwd;
this.age = age;
this.score = score;
}
@Override
public String toString() {
return "{id:" + id + ", name:" + name + ", pwd:" + pwd + ", age:" + age + ", score:" + score + "}";
}
}
package register;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Properties;
public class RegServerThread extends Thread {
@Override
public void run() {
//实例化一个专门处理注册的socket
ServerSocket ss = null;
Socket s = null;
BufferedReader br = null;
BufferedWriter bw = null;
try {
//创建socket服务器
ss = new ServerSocket(8989);
//接收客户端的请求链接
s = ss.accept();
//获取用户提交注册的信息
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
//读取用户提交的注册数据
String userInfo = br.readLine();
//对用户数据进行处理 提取用户的键 用 ","和":"来分割数据
String ids = userInfo.substring(1,userInfo.length()-1).split(",")[0];
//通过键来获取值
String idValue = ids.split(":")[1];
//6把得到的id的值放到集合中判断之前知否已经有这个用户注册过
//ProUils.getPro();原来已经存在的数据
//用户当前注册的数据
Properties pros = ProUils.getPro();
String msg = "";
//判断用户输入的值是否与已经存在的值相等
if(pros.containsKey(idValue)) {
//用户已存在
msg = "用户已被注册";
}else {
//不相等,就注册一个新用户 把用户输入的信息保存到文件中 idValue userInfo
ProUils.savePro(idValue, userInfo);
msg = "用户注册成功";
}
//7响应结果给用户
bw.write(msg);
//清除缓存
bw.flush();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
try {
bw.close();
br.close();
s.close();
ss.close();
} catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
}
package register;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.nio.file.Path;
import java.util.Scanner;
public class Client {
private static final String PATH = "E:\\java资料\\2105\\user.properties";
Scanner input = new Scanner(System.in);
/**
* 打印菜单
*/
public void showMenu() {
//死循环
while (true) {
System.out.println("==============欢迎您使用xxx系统===================");
System.out.println("1.注册\t\t2.登录\t\t3.退出");
String chose = input.next();
switch (chose) {
case "1":
//调用注册方法
doReg();
break;
case "2":
//登陆方法
doLogin();
break;
case "3":
System.out.println("欢迎下次再来");
return;
default:
System.out.println("你输入的选项不存在,请重新在试");
break;
}
}
}
/**
* 注册方法
*/
public void doReg() {
Socket s = null;
BufferedReader br = null;
BufferedWriter bw = null;
try {
//1请求到注册服务器的socket对象
s = new Socket("localhost",8989);
//获得用户输入的数据
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
//把用户提交的信息写入文件中
bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
//2发送要注册的用户数据过去
User u = inputUserInfo();
//把数据转成字符串
String regRequst = u.toString();
//写入数据
bw.write(regRequst);
bw.newLine();
bw.flush();
//3接收响应结果
String response = br.readLine();
System.out.println("服务器返回结果为:"+response);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
bw.close();
br.close();
s.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}
/**
* 登陆放法
*/
public void doLogin() {
Socket s= null;
BufferedReader br = null;
BufferedWriter bw = null;
try {
s = new Socket("localhost",8988);
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String loginRequest = inputLogin();
bw.write(loginRequest);
bw.newLine();
bw.flush();
//3
String response = br.readLine();
System.out.println("服务器响应:"+response);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
bw.close();
br.close();
s.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}
/**
* 输入用户登录信息
* @return
*/
public String inputLogin() {
System.out.println("请输入用户id:");
String id = input.next();
System.out.println("请输入用户密码:");
String pwd = input.next();
return id+":"+pwd;
}
// public void login() {
//
// Socket s = null;
// BufferedReader br = null;
// Scanner input = new Scanner(System.in);
// System.out.println("欢迎你登录!!");
// System.out.println("请输入账号:");
// String id = input.next();
// System.out.println("请输入密码:");
// String pwd = input.next();
//
// try {
ProUils pro = new ProUils();
// s = new Socket("localhost",8989);
// br = new BufferedReader(new FileReader(PATH));
// char[] data = new char[1024];
// int count = 0;
//
// while((count=br.read(data))!=-1) {
// String str = new String(data,0,count);
// if(str.contains(id)&&str.contains(pwd)) {
// System.out.println("登录成功");
// }else{
// System.out.println("登陆失败");
// }
// }
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }finally {
// try {
// br.close();
// s.close();
// } catch (Exception e2) {
// // TODO: handle exception
// }
// }
// }
/**
* 获取用户输入的用户注册信息
* @return
*/
public User inputUserInfo() {
System.out.println("请输入ID:");
String id = input.next();
System.out.println("请输入姓名:");
String name = input.next();
System.out.println("请输入密码:");
String pwd = input.next();
System.out.println("请输入年龄:");
int age = input.nextInt();
System.out.println("请输入成绩:");
double score = input.nextDouble();
//创建user对象封装数据
return new User(id, name, pwd, age, score);
}
}
package register;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Properties;
/**
* 登录
*/
public class LoginServerThread extends Thread {
@Override
public void run() {
//1.创建socket服务器
ServerSocket ss = null;
Socket s = null;
BufferedReader br = null;
BufferedWriter bw = null;
try {
//1创建Socket服务器
ss = new ServerSocket(8988);
//2接收客户端请求链接
s=ss.accept();
//获取用户提交的注册信息
br =new BufferedReader(new InputStreamReader(s.getInputStream()));
bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
//3读取用户提交的信息
String request = br.readLine();
//4获取 properties对象
//调用方法验证登录
//给出客户端响应
String msg ="登录失败";
boolean flag = checkLogin(request);
if(flag) {
msg = "登录成功";
}
bw.write(msg);
bw.newLine();
bw.flush();
} catch (Exception e) {
// TODO: handle exception
}finally {
try {
bw.close();
br.close();
s.close();
ss.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}
/**
* 验证方法
* @param request
* @return
*/
public boolean checkLogin(String request) {
// System.out.println(request);
//分割 获取用户输入的id号和密码
//id:123,pwd:123
String userId = request.split(":")[0];
String usepwd = request.split(":")[1];
Properties pro = ProUils.getPro();
//4判断 id是否存在
if(pro.containsKey(userId)) {
//用户有注册,判断密码是否正确
//userInfo {id:123, name:小小, pwd:123, age:15, score:98.0}
//输入id 获得这id的全部信息
String userInfo = (String)pro.getProperty(userId);
// System.out.println(userInfo);
//在对pwd进行提取
String pwd = userInfo.substring(1,userInfo.length()-1).split(",")[2].split(":")[1];
//4.2判断密码是否正确
if(pwd.equals(usepwd)) {
return true;
}
}
return false;
}
}
package register;
public class Test {
public static void main(String[] args) {
RegServerThread t = new RegServerThread();
LoginServerThread ls = new LoginServerThread();
t.start();
ls.start();
Client c = new Client();
c.showMenu();
}
}