纯小白编程,只是通过这些来总结给自己的问题和记录自己的想法理解,如果有任何不对,评论区可以指正。
(1)用户包含管理员和普通用户两个角色进行测试。假定:管理员用户名:admin,密码:abc 普通用户名:user 密码:123
(2)用户从客户端发起登录请求,客户端将数据传递到服务器端, 由服务器做验证。服务器端保存用户数据。用户登录成功提示登录成功 并显示功能模块,登录失败提示:用户名或密码不正确
一
创建服务器和客户端
/*服务器端
ServerSocket socket = new ServerSocket(12345);
while (true){
Socket o = socket.accept();
System.out.println("连接成功");
String i = say(o);
switch (i){
case DomeUtio.LOGIN:
logIn(o);
}
}
} catch (IOException e) {
// e.printStackTrace();
}
}
/*
客户端
{
Socket socket = new Socket(host,i);
}
二
相互传输,在传输时尽量减少使用io的流,可以使用DataObjcetStrem DataInpnutStrem
/*
这个输出流使用的 DataOutputStream
public static void outDome(Socket socket , String i) throws IOException {
DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
dataOutputStream.writeUTF(i);
}
这个是输入流使用的 DataInputStream
public static String inInput(Socket socket) throws IOException {
DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());
return (String)dataInputStream.readUTF();
}
这里用到的io流因为要传递账号密码,所以对User这个类添加了接口,并且传递 这个是输入流
public static User inputUser(Socket socket) throws IOException, ClassNotFoundException {
ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream());
User user =(User) objectInputStream.readObject();
return user;
}
这是输出流
public static void sendingUser(Socket socket,User u) throws IOException {
ObjectOutputStream outputStream = new ObjectOutputStream(socket.getOutputStream());
outputStream.writeObject(u);
}
三
传递过来的数据比较方法 比较过程中特别容易犯的错是equals和==弄混
双等号进行比较的时候,比较的是他们在内存中的存放地址除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false
equals在没有重写它的比较方法时,还是基于内存中的存放位置的地址值
客户端
if (i.equals("1")){
System.out.println("登录成功,管理员您好");
}
if (i.equals("2")){
System.out.println("用户您好!登录成功");
}
if (i.equals("0")){
System.out.println("账号或者密码错误");
}
服务器
if (U.getAccountNumber().equals(user.getAccountNumber())&&U.getPassword().equals(user.getPassword())){
value="1";
DomeUtio.outDome(socket,value);
System.out.println("登录成功");
}
else if (Y.getAccountNumber().equals(user.getAccountNumber())&&Y.getPassword().equals(user.getPassword())){
value = "2";
DomeUtio.outDome(socket,value);
System.out.println("登录成功");