zoukankan      html  css  js  c++  java
  • tcp编程:多用户登录

    package com.sundear.demo.tcp;
    
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    /**
     * 模拟登录:多用户登录
     * 创建服务器
     * 1。指定端口 使用ServerSocket创建服务器
     * 2,阻塞式等待连接 accept
     * 3. 操作 输入输出流操作
     * 4。 释放资源
     */
    public class LoginMultiServer {
        public static void main(String[] args) throws IOException {
            System.out.println("---server---");
            //指定端口 使用ServerSocket创建服务器
            ServerSocket server = new ServerSocket(8888);
            boolean isRunning =true;
            while (isRunning) {
                //阻塞式等待连接 accept
                Socket client = server.accept();
                System.out.println("一个客户端建立了连接");
                new Thread(new Channel(client)).start();
            }
            server.close();
        }
    
       static class Channel implements Runnable{
           private Socket client;
           public  DataInputStream dis;
           public DataOutputStream dos;
           public Channel(Socket client){
               this.client= client;
               try {
                   dis = new DataInputStream(client.getInputStream());
                   dos =new DataOutputStream(client.getOutputStream());
               }catch (IOException e){
                   e.printStackTrace();
                   relesae();
               }
    
    
           }
           private String receive(){
               String datas ="";
               try{
                  datas = dis.readUTF();
               }catch (Exception e){
                   e.printStackTrace();
               }
               return datas;
           }
    
           private void send(String msg){
               try {
                   dos.writeUTF(msg);
                   dos.flush();
               } catch (IOException e) {
                   e.printStackTrace();
               }
    
           }
           private void relesae(){
               try {
                   if(null !=dos) {
                       dos.close();
                   }
               } catch (IOException e) {
                   e.printStackTrace();
               }
               try {
                   if(null !=dis) {
                       dis.close();
                   }
               } catch (IOException e) {
                   e.printStackTrace();
               }
               try {
                   if(null !=client) {
                       client.close();
                   }
               } catch (IOException e) {
                   e.printStackTrace();
               }
           }
           @Override
           public void run() {
               //操作 输入输出流操作
               String username = "";
               String password = "";
               String[] datas = receive().split("&");
               for (String info : datas) {
                   String[] user = info.split("=");
                   if (user[0].equals("username")) {
                       System.out.println("你的用户名为" + user[1]);
                       username = user[1];
                   } else if (user[0].equals("password")) {
                       System.out.println("你的密码为" + user[1]);
                       password = user[1];
                   }
               }
    
               if (username.equals("root") && password.equals("sundear123")) {
                   send("登录成功,欢迎回来");
               } else {
                   send("用户名或密码错误");
               }
               relesae();
           }
       }
    
    }
    

      

    package com.sundear.demo.tcp;
    
    import java.io.*;
    import java.net.Socket;
    
    /**
     * 模拟登录:多用户登录
     * 创建客户端
     * 1。建立连接 使用Socket创建客户端+服务的地址和端口
     * 2. 操作 输入输出流操作
     * 3。 释放资源
     */
    public class LoginMultiClient {
        public static void main(String[] args) throws IOException {
            System.out.println("---client---");
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("请输入用户名");
            String username =br.readLine();
            System.out.println("请输入密码");
            String password =br.readLine();
            Socket client =new Socket("localhost",8888);
            new Send(client).send("username="+username+"&"+"password="+password);
            new Receive(client).receive();
            client.close();
    
        }
        static class Send{
            private Socket client;
            private  DataOutputStream dos;
            public Send(Socket client){
                this.client=client;
                try {
                    dos =new DataOutputStream(client.getOutputStream());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            public void send(String msg){
                try {
                    dos.writeUTF(msg);
                    dos.flush();
                } catch (IOException e) {
                    e.printStackTrace();
                }
    
            }
        }
        static class Receive{
            private Socket client;
            private DataInputStream dis ;
             public  Receive(Socket client){
                this.client=client;
                 try {
                     dis = new DataInputStream(client.getInputStream());
                 } catch (IOException e) {
                     e.printStackTrace();
                 }
             }
    
             public void receive(){
                 String result;
                 try {
                     result = dis.readUTF();
                     System.out.println(result);
                 } catch (IOException e) {
                     e.printStackTrace();
                 }
             }
        }
    }
    

      

  • 相关阅读:
    Java之装饰模式
    Sharding-jdbc(一)分库分表理解
    JVM(四)JVM的双亲委派模型
    JVM(三)JVM的ClassLoader类加载器
    JVM(二)JVM的结构
    JVM(一)JVM的概述与运行流程
    Redis随笔(六)RESP的协议规范
    Redis随笔(五)Jedis、jedisCluster的使用
    Collections.synchronizedList使用方法陷阱(1)
    Collections.synchronizedList使用方法
  • 原文地址:https://www.cnblogs.com/yxj808/p/15014530.html
Copyright © 2011-2022 走看看