【网络编程--TCP协议下模拟多用户登录】

1.网络编程–TCP协议下模拟多用户登录

1.1 客户端

//1.定义客户端
        Socket client = new Socket("127.0.0.1",8888);
        //2.准备数据,字符(缓冲)输入流读取键盘输入数据,读一行
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("请输入用户名");
        String username = reader.readLine();
        System.out.println("请输入用户密码");
        String password = reader.readLine();
        //3.输出流
        DataOutputStream output =new DataOutputStream(client.getOutputStream());
        //4.写出数据
        output.writeUTF("username:"+username+"&"+"password:"+password);
        //5.刷出
        output.flush();
        //6.创建输入流
        DataInputStream input = new DataInputStream(client.getInputStream());
        //7.读取反馈数据
        String result = input.readUTF();
        System.out.println(result);
        //8.关闭
        input.close();
        output.close();
        reader.close();
        client.close();

1.2 服务器端

//1.定义服务端
        ServerSocket socket = new ServerSocket(8888);
        //2.监听,等待连接
        Socket server = socket.accept();
        //3.输入流
        DataInputStream inputStream = new DataInputStream(server.getInputStream());
        //4.读取数据
        String message = inputStream.readUTF();
        //5.校验数据
        String[] mess = message.split("&");
        String[] username = mess[0].split(":");
        String[] password = mess[1].split(":");
        //6.输出数据
        DataOutputStream OutputStream = new DataOutputStream(server.getOutputStream());
        //7.输出流,写出反馈数据
        if("tt".equals(username[1])&&"123".equals(password[1])){
            OutputStream.writeUTF("yes");
        }else {
            OutputStream.writeUTF("no");
        }
        //8.刷出关闭
        OutputStream.flush();
        OutputStream.close();
        inputStream.close();
        server.close();
        socket.close();

2.加入多线程模拟多用户登录

2.1 客户端

//1.定义客户端
        Socket client = new Socket("127.0.0.1",8888);
        //2.准备数据,字符(缓冲)输入流读取键盘输入数据,读一行
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("请输入用户名");
        String username = reader.readLine();
        System.out.println("请输入用户密码");
        String password = reader.readLine();
        //3.输出流
        DataOutputStream output =new DataOutputStream(client.getOutputStream());
        //4.写出数据
        output.writeUTF("username:"+username+"&"+"password:"+password);
        //5.刷出
        output.flush();
        //6.创建输入流
        DataInputStream input = new DataInputStream(client.getInputStream());
        //7.读取反馈数据
        String result = input.readUTF();
        System.out.println(result);
        //8.关闭
        input.close();
        output.close();
        reader.close();
        client.close();

2.2 服务器端

public class MultiServer {
    public static void main(String[] args) throws IOException {
        //1.定义服务端
        ServerSocket socket = new ServerSocket(8888);
        //2.监听,等待连接
        boolean connection = true;
        while (connection) {
            System.out.println("一个用户创建连接");
            Socket server = socket.accept();
            new Thread(new ManyUser(server)).start();
        }
        socket.close();
 }

    static class ManyUser implements Runnable {
        private DataOutputStream output;
        private DataInputStream input;
        private Socket server;

        public ManyUser(Socket server) throws IOException {
            this.output = new DataOutputStream(server.getOutputStream());
            this.input = new DataInputStream(server.getInputStream());
            this.server = server;
        }

        public String read() {
            String message = "";
            try {
                message = input.readUTF();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return message;
        }

        public void write(String message) {
            try {
                output.writeUTF(message);
                output.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        public void close()  {
            if(output!=null){
                try {
                    output.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }if(input!=null){
                try {
                    input.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
        
        @Override
        public void run() {
            String message=read();
            //5.校验数据
            String[] mess = message.split("&");
            String[] username = mess[0].split(":");
            String[] password = mess[1].split(":");
            if ("tt".equals(username[1]) && "123".equals(password[1])) {
                write("登录成功");
            } else {
                write("登录失败");
            }
            close();
        }
    }
}
六级标题
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值