注册、登录案例
服务器端
public class TCPServer {
public static void main(String[] args) throws IOException {
//创建集合,保存用户名,密码
Properties properties = new Properties();
//创建File文件
File file = new File("userinfo.properties");
if (!file.exists()) {
file.createNewFile();
}
//从文件中加载数据到集合中
properties.load(new FileReader(file));
new RegThread(properties).start();
new LoginThread(properties).start();
}
}
注册
public class RegThread extends Thread {
private Properties properties;
public RegThread(Properties properties) {
this.properties = properties;
}
@Override
public void run() {
ServerSocket listener = null;
Socket socket = null;
BufferedReader br = null;
BufferedWriter bw = null;
//1.获取ServerSocket,传入监听端口号
try {
listener = new ServerSocket(666);
//2.监听
System.out.println("注册线程启动");
socket = listener.accept();
//3.获取流
InputStream is = socket.getInputStream();
br = new BufferedReader(new InputStreamReader(is));
OutputStream os = socket.getOutputStream();
bw = new BufferedWriter(new OutputStreamWriter(os));
//4.处理数据
String data = br.readLine();
String[] infos = data.split("#");
if (infos != null) {
//判断是否需要添加集合
if (!properties.containsKey(infos[0])) {
properties.setProperty(infos[0], infos[1]);
bw.write("注册成功");
bw.newLine();
bw.close();
//写入文件 注意!写入文件的时候,使用的不是socket获取的流了
FileWriter fw = new FileWriter("userinfo.properties");
properties.store(fw, "");
fw.flush();
fw.close();
} else {
bw.write("用户名已存在");
bw.newLine();
bw.close();
}
}
//5.关闭资源
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bw.close();
br.close();
socket.close();
listener.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
登录
public class LoginThread extends Thread {
private Properties properties;
public LoginThread(Properties properties) {
this.properties = properties;
}
@Override
public void run() {
BufferedReader br = null;
BufferedWriter bw = null;
Socket socket = null;
ServerSocket listener = null;
//1.创建ServerSocket
try {
listener = new ServerSocket(999);
//2.监听
System.out.println("登录线程启动");
socket = listener.accept();
//3.获取流
InputStream is = socket.getInputStream();
br = new BufferedReader(new InputStreamReader(is));
OutputStream os = socket.getOutputStream();
bw = new BufferedWriter(new OutputStreamWriter(os));
//4.处理数据
String data = br.readLine();
String[] split = data.split("#");
if (split != null) {
if (properties.containsKey(split[0])) {
if (split[1].equals(properties.get(split[0]))) {
bw.write("登陆成功");
bw.newLine();
bw.flush();
} else {
bw.write("密码错误");
bw.newLine();
bw.flush();
}
} else {
//向客户端返回登陆失败
bw.write("用户名不存在");
bw.newLine();
bw.flush();
}
}
//5.关闭资源
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bw.close();
br.close();
socket.close();
listener.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
客户端
public class TCPClient {
public static void main(String[] args) {
reg();
login();
}
public static void login() {
doAction(999);
}
public static void reg(){
doAction(666);
}
public static void doAction(int port) {
BufferedReader br = null;
BufferedWriter bw = null;
Socket socket = null;
//1.创建Socket,绑定端口号
try {
socket = new Socket("10.9.21.216", port);
//2.获取流
InputStream is = socket.getInputStream();
br = new BufferedReader(new InputStreamReader(is));
OutputStream os = socket.getOutputStream();
bw = new BufferedWriter(new OutputStreamWriter(os));
//3.发送数据
Scanner sc = new Scanner(System.in);
System.out.println("请输入姓名:");
String name = sc.next();
System.out.println("请输入密码:");
String password = sc.next();
bw.write(name + "#" + password);
bw.newLine();
bw.flush();
//接收回复
String s = br.readLine();
System.out.println("服务器回复:" + s);
} catch (IOException e) {
e.printStackTrace();
} finally {
//4.关闭资源
try {
bw.close();
br.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}