基于网络编程和多线程的作业问题总结

纯小白编程,只是通过这些来总结给自己的问题和记录自己的想法理解,如果有任何不对,评论区可以指正。

(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("登录成功");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值