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

2020-10-14  本文已影响0人  杨晓霞sherry

参考文档:

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();
    }
}
上一篇下一篇

猜你喜欢

热点阅读