功能:服务器端实现注册与登录功能,并将信息保存到properties文件,客户端通过tcp访问服务器:
首先实现一个文件操作类,分别用来加载文件和保存文件:
package FileTools;
import java.io.*;
import java.util.Properties;
public class FileTools {
// 加载属性文件
public static Properties LoadProperties() {
Properties properties = new Properties();
File file = new File("D:\\IntelliJ IDEA\\project\\NetWorkServerClient\\src\\main\\java\\regFile.properties");
if (file.exists()) {
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
properties.load(fis);
} catch (Exception e) {
e.printStackTrace();
} finally {
if(fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
return properties;
}
// 保存属性文件
public static void SaveProperties(String json) {
String[] strings = json.substring(1, json.length() - 1).split(",");
String id = strings[0].split(":")[1];
FileOutputStream fos = null;
try {
// 这里设置为ture,表示追加
fos = new FileOutputStream("D:\\IntelliJ IDEA\\project\\NetWorkServerClient\\src\\main\\java\\regFile.properties", true);
Properties properties = new Properties();
properties.setProperty(id, json);
properties.store(fos, "");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
服务器端实现两个线程,分别是注册端口的接收和登录端口的接收:
注册线程:
package TcpServer;
import FileTools.FileTools;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Properties;
/**
* 实现注册功能
*/
public class RegisterThread extends Thread {
@Override
public void run() {
try {
// 创建ServerSocket
ServerSocket listener = new ServerSocket(6666);
// 调用accept方法
System.out.println("注册服务器已经启动......");
Socket socket = listener.accept();
// 获取输入输出流
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "utf-8"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "utf-8"));
// 接收客户端发送的数据{id:1001,name:lina,pwd:123456,age:20}
String json = br.readLine();
String[] strings = json.substring(1, json.length() - 1).split(",");
String id = strings[0].split(":")[1];
// 加载属性文件
Properties properties = FileTools.LoadProperties();
if (properties.containsKey(id)) {
bw.write("此用户已存在!");
System.out.println("此用户已存在!");
} else {
FileTools.SaveProperties(json);
bw.write("此用户注册成功!");
System.out.println("此用户注册成功!");
}
bw.newLine();
bw.close();
br.close();
socket.close();
listener.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
登录线程:
package TcpServer;
import FileTools.FileTools;
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 LoginThread extends Thread {
@Override
public void run() {
try {
// 创建ServerSocket
ServerSocket listener = new ServerSocket(7777);
// 调用accept方法
System.out.println("登录服务器已经启动......");
Socket socket = listener.accept();
// 获取输入输出流
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "utf-8"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "utf-8"));
// 接收客户端发送的数据{id:1001,pwd:123456}
String json = br.readLine();
String[] strings = json.substring(1, json.length() - 1).split(",");
String id = strings[0].split(":")[1];
String pwd = strings[1].split(":")[1];
// 加载属性文件
Properties properties = FileTools.LoadProperties();
if (properties.containsKey(id)) {
String replySuccess = "登录成功!";
String replyError = "密码错误";
String pwdCheckJson = properties.getProperty(id);
String[] stringsCehck = pwdCheckJson.substring(1, pwdCheckJson.length() - 1).split(",");
String pwdCheck = stringsCehck[2].split(":")[1];
if (pwdCheck.equals(pwd)) {
bw.write(replySuccess);
System.out.println(replySuccess);
} else {
bw.write(replyError);
System.out.println(replyError);
}
} else {
String replyError = "用户名错误";
bw.write(replyError);
System.out.println(replyError);
}
bw.newLine();
bw.close();
br.close();
socket.close();
listener.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
接下来是客户端的实现:
package TcpClient;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class UserClient {
public static void main(String[] args) {
System.out.println("----------请选择:1 注册,2 登录-----------");
Scanner scanner = new Scanner(System.in);
int choise = scanner.nextInt();
switch(choise) {
case 1:
// 注册
try {
RegitserClient();
} catch (Exception e) {
e.printStackTrace();
}
break;
case 2:
// 登录
try {
LoginClient();
} catch (Exception e) {
e.printStackTrace();
}
break;
default:
break;
}
}
public static void RegitserClient() throws Exception {
InetAddress ia = InetAddress.getLocalHost();
Socket socket = new Socket(ia.getHostAddress(), 6666);
// 获取输入输出流
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "utf-8"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "utf-8"));
// 获取用户输入
String json = GetUserRegInof();
// 发送数据
bw.write(json);
bw.newLine();
bw.flush();
// 接收
String reply = br.readLine();
System.out.println("服务器回复:" + reply);
// 关闭
bw.close();
br.close();
socket.close();
}
public static String GetUserRegInof() {
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 LoginClient() throws Exception {
InetAddress ia = InetAddress.getLocalHost();
Socket socket = new Socket(ia.getHostAddress(), 7777);
// 获取输入输出流
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "utf-8"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "utf-8"));
// 获取用户输入
String json = GetUserLoginInof();
// 发送数据
bw.write(json);
bw.newLine();
bw.flush();
// 接收
String reply = br.readLine();
System.out.println("服务器回复:" + reply);
// 关闭
bw.close();
br.close();
socket.close();
}
public static String GetUserLoginInof() {
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;
}
}