话不多说,直接上代码。代码中如有疑问欢迎大家评论区交流。
/*
* 服务器类
*/
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 UserServer {
public static void main(String[] args) {
//创建注册线程
Thread registThread = new Thread(new Runnable() {
@Override
public void run() {
try {
//1创建serversocket
ServerSocket listener= new ServerSocket(6666);
//2调用accept()
System.out.println("注册服务器已启动。。。");
Socket socket = listener.accept();
//3获取输入流
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(),"utf-8"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"utf-8"));
//4接收客户端数据{id:1001,name:tom,pwd:123}
String json = br.readLine();//读一行数据
String[] infos =json.substring(1,json.length()-1).split(",");
String id = infos[0].split(":")[1];
//5加载属性文件
Properties properties = Tools.loadProperties();
//6判断有没有id
if(properties.containsKey(id)){
bw.write("此用户已存在");//有
}else{
//保存属性方法
Tools.saveProperties(json);
bw.write("注册成功");//没有
}
//7关闭
bw.newLine();
bw.flush();
bw.close();
br.close();
socket.close();
listener.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
//创建登入线程
Thread loginThread=new Thread(new Runnable() {
@Override
public void run() {
try {
//1创建serversocket
ServerSocket listener= new ServerSocket(7777);
//2调用accept()
System.out.println("登入服务器已启动。。。");
Socket socket = listener.accept();
//3获取输入流
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(),"utf-8"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"utf-8"));
//4接收客户端数据{id:1001,name:tom,pwd:123}
String json = br.readLine();//读一行数据
String[] infos =json.substring(1,json.length()-1).split(",");
String id = infos[0].split(":")[1];
//5加载属性文件
Properties properties = Tools.loadProperties();
//6判断是否存在
if(properties.containsKey(id)){
//判断密码是否正确
String pwd= infos[1].split(":")[1];//客户端发过来的密码 数据格式按照客户端发送为准
String value = properties.getProperty(id);//定位到哪一行数据
String[] arr=value.substring(1,value.length()-1).split(",");
String localPwd=arr[2].split(":")[1];
if(pwd.equals(localPwd)){
bw.write("登入成功");//有
}else{
bw.write("密码错误");//没有
}
}else{
bw.write("用户名或密码错误");//没有
}
//7关闭
bw.newLine();
bw.flush();
bw.close();
br.close();
socket.close();
listener.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
//启动线程
registThread.start();
loginThread.start();
}
}```
```java
/**
* 客户端类
*/
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 UserClient {
public static void main(String[] args) throws Exception{
System.out.println("=======请选择 1 注册 2 登入========");
Scanner input = new Scanner(System.in);
int choice = input.nextInt();
switch (choice) {
case 1:
regist();
break;
case 2:
login();
break;
default:
break;
}
}
public static void regist() throws Exception{
//1创建socket
Socket socket = new Socket("192.168.215.208",6666);
//2获取流
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(),"utf-8"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"utf-8"));
//3获取用户信息
String json = getRegistInfo();
//4发送
bw.write(json);
bw.newLine();
bw.flush();
//5接收回复
String reply = br.readLine();
System.out.println("服务器回复:"+reply);
//6关闭
br.close();
bw.close();
socket.close();
}
public static String getRegistInfo(){
Scanner input = new Scanner(System.in);
System.out.println("请输入用户编码");
int id = input.nextInt();
System.out.println("请输入姓名");
String name = input.next();
System.out.println("请输入密码");
String pwd = input.next();
System.out.println("请输入年龄");
int age = input.nextInt();
String json ="{id:"+id+",name:"+name+",pwd:"+pwd+",age:"+age+"}";
return json;
}
public static void login() throws Exception {
// 1创建socket
Socket socket = new Socket("192.168.215.208", 7777);//注意端口号不能相同
// 2获取流
BufferedReader br = new BufferedReader(new InputStreamReader(
socket.getInputStream(), "utf-8"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream(), "utf-8"));
// 3获取用户信息
String json = getLoginInfo();
// 4发送
bw.write(json);
bw.newLine();
bw.flush();
// 5接受回复
String reply = br.readLine();
System.out.println("服务器回复:" + reply);
// 6关闭
br.close();
bw.close();
socket.close();
}
public static String getLoginInfo(){
Scanner input = new Scanner(System.in);
System.out.println("请输入用户编码");
int id = input.nextInt();
System.out.println("请输入密码");
String pwd = input.next();
String json ="{id:"+id+",pwd:"+pwd+"}";
return json;
}
}
* 工具类
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
public class Tools {
//1加载属性文件
public static Properties loadProperties(){
//1创建属性集合
Properties properties = new Properties();
//2判断文件是否存在
File file = new File("users.properties");
if(file.exists()){
FileInputStream fis=null;
try {
fis = new FileInputStream(file);
try {
properties.load(fis);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(fis!=null){
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
return properties;
}
public static void saveProperties(String json){
String[] infos = json.substring(1, json.length()-1).split(",");
String id = infos[0].split(":")[1];
//保存
FileOutputStream fos=null;
try {
fos = new FileOutputStream("users.properties",true);
Properties properties =new Properties();
properties.setProperty(id, json);
try {
properties.store(fos, "");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//后面是注释
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(fos!=null){
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}```