关于客户登录案例的思考

来源:互联网 发布:女权运动 知乎 编辑:程序博客网 时间:2024/06/01 09:39
一个客户登录系统,最简单也需要,客户端、服务器端、数据库、客户类

客户端,需要建立socket端口,创建键盘输入流,创建数据输出流对象,在输出数据之后,接受服务器端传过来的判断数据,并展示服务器端数据。

服务器端,建立服务器端口,建立socket端口,创建输出流,接收客户端发过来的数据,与数据库进行比较,判断输入信息的正确性,并返回给客户端。

数据库,用来存储数据的地方,并提供接口供调用

一个类,用来定义账号密码的格式以及方便调用数据库中的信息

 

 

客户端代码:

package com;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;/* * 模拟用户登录改写(面向对象版本) */public class ClientTest {public static void main(String[] args) throws  IOException  {//创建客户端Socket对象Socket s = new Socket("SKY",8888);//获取用户名和密码BufferedReader br = new BufferedReader(new InputStreamReader(System.in));System.out.println("请输入用户名:");String username = br.readLine();System.out.println("请输入密码:");String password = br.readLine();//获取输出流对象PrintWriter out = new PrintWriter(s.getOutputStream(),true);//写出数据out.println(username);out.println(password);//获取输入流对象BufferedReader serverBr = new BufferedReader(new InputStreamReader(s.getInputStream()));//获取服务器返回的数据String result = serverBr.readLine();System.out.println(result);//释放资源s.close();}}

 

服务器端代码:


 

package com

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.List;

public class ServerTest {
 public static void main(String[] args) throws IOException {
  // 创建服务器端口
  ServerSocket ss = new ServerSocket(8888);
  // 创建套接字端口
  Socket s = ss.accept();
  // 获取输入流
  BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
  // 接收数据
  String username = br.readLine();
  String password = br.readLine();
  // 判断数据
  boolean flag = false;
  /*if ("".equals(username) && "".equals(username)) {
   flag = true;
  }*/
  
  //获取数据库中的数据
  List<User> users=UserDataBase.getUsers();
  //判断该集合内是否有这个对象
  User userss=new User(username,password);
  if(users.contains(userss)){
   flag=true;
  }
  
  
  // 获取输出流对象
  PrintWriter pw = new PrintWriter(s.getOutputStream(), true);
  // 返回判断信息
  if (flag) {
   pw.println("登录成功");
  } else {
   pw.println("登陆失败");
  }

  // 释放资源
  s.close();
 }
}

用户类代码:

package com.it_07;

public class User {
 private String username;
 private String password;

 public User() {
  super();
 }

 public User(String username, String password) {
  super();
  this.username = username;
  this.password = password;
 }

 public String getUsername() {
  return username;
 }

 public void setUsername(String username) {
  this.username = username;
 }

 public String getPassword() {
  return password;
 }

 public void setPassword(String password) {
  this.password = password;
 }

 

 @Override
 public boolean equals(Object obj) {
  if (this == obj)
   return true;
  if (obj == null)
   return false;
  if (getClass() != obj.getClass())
   return false;
  User other = (User) obj;
  if (password == null) {
   if (other.password != null)
    return false;
  } else if (!password.equals(other.password))
   return false;
  if (username == null) {
   if (other.username != null)
    return false;
  } else if (!username.equals(other.username))
   return false;
  return true;
 }

}

 

模拟数据库的代码片段

package com.it_07;

import java.util.ArrayList;
import java.util.List;

/*用来存数据,写这个类模拟数据库*/
public class UserDataBase {
 // 通过创建集合来存储用户对象
 private static List<User> users = new ArrayList<User>();
 // 添加数据
 static {
  users.add(new User("zhang", "123456"));
  users.add(new User("lisii", "654321"));
  users.add(new User("heima", "heimaheima"));
  users.add(new User("admin", "password"));
 }

 // 创建调用方法
 public static List<User> getUsers() {
  return users;
 }

}