美文网首页
java 基于TCP协议的SOCKET的编程和通信——模拟用户登

java 基于TCP协议的SOCKET的编程和通信——模拟用户登

作者: 杨晓霞sherry | 来源:发表于2020-10-14 15:22 被阅读0次

    参考文档:

    https://www.sxt.cn/Java_jQuery_in_action/twelve-tcpsocket.html
    

    参考视频:

    https://www.bilibili.com/video/BV1ct411n7oG?p=245
    

    1.代码功能

    1.判断从客户端接收到的用户名和密码是否和已知的一致
    2.返回服务器判断的结果到客户端上
    

    2.学习重点

    1.分清哪边是输入流哪边是输出流
    2.split函数和数组的遍历
    

    3.客户端代码

    1.发送数据用的输出流和writeUTF(发送用户名密码)
    2.接收数据用的输入流和readUTF  (读取服务器判断的结果)
    3.其他思路和之前一样
    
    package com.sxt.tcp;
    
    import java.io.BufferedReader;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    /**
     *模拟登录 双向
     * 创建客户端
     * 1.建立连接:使用Socket创建客户端+服务的地址和端口
     * 2.操作:输入输出流操作
     * 3.释放资源
     * @author Yangxiaoxia
     *
     */
    public class LoginTwoWayClient {
        public static void main(String[] args) throws UnknownHostException, IOException {
            System.out.println("-----Client-----");
            BufferedReader console =new BufferedReader(new InputStreamReader(System.in));
            System.out.print("请输入用户名:");
            String uname=console.readLine();
            System.out.print("请输入密码:");
            String upwd =console.readLine();
            //1.建立连接:使用Socket创建客户端+服务的地址和端口
            Socket client=new Socket("localhost",8888);
            //2.操作:输入输出流操作
            DataOutputStream dos=new DataOutputStream(client.getOutputStream()); 
            dos.writeUTF("uname="+uname+"&"+"upwd="+upwd);
            dos.flush();
            
            DataInputStream dis=new DataInputStream(client.getInputStream());
            String result=dis.readUTF();
            System.out.println(result);
            //3.释放资源
            dos.close();
            client.close();
        }
    }
    

    4.服务器端代码

      1.判断客户端传来的输入流里的数据是否符合条件,然后以输出流返回结果给客户端
    
    package com.sxt.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.释放资源
     * @author Yangxiaoxia
     *
     */
    public class LoginTwoWayServer {
        public static void main(String[] args) throws IOException {
            System.out.println("------Server-------");
             // 1.指定端口 使用ServerSocket创建服务器
            ServerSocket server=new ServerSocket(8888);
             // 2.阻塞式等待连接 accept
            Socket client=server.accept();
            System.out.println("一个客户端建立了连接");
             // 3.操作:输入输出流操作
            DataInputStream dis=new DataInputStream(client.getInputStream());
            String data=dis.readUTF();
            System.out.println(data);
            String uname=" ";
            String upwd=" ";
            //分析
            String[] dataArray=data.split("&");
            for(String info:dataArray) {
                String[] userinfo=info.split("=");
                if(userinfo[0].equals("uname")) { 
                    uname=userinfo[1];
                }else if(userinfo[0].equals("upwd")) { 
                    upwd=userinfo[1];
                } 
            }
            //输出
            DataOutputStream dos=new DataOutputStream(client.getOutputStream());
            if(uname.equals("baidu")&& upwd.equals("123456")) {//成功
                dos.writeUTF("登录成功,欢迎回来");
            }else {//失败
                dos.writeUTF("用户名或密码错误");
            }
            dos.flush();
             //4.释放资源
            dis.close();
            client.close();
            server.close();
        }
    }
    

    相关文章

      网友评论

          本文标题:java 基于TCP协议的SOCKET的编程和通信——模拟用户登

          本文链接:https://www.haomeiwen.com/subject/pvtwpktx.html