编写Java程序,用套接字编程模拟实现银行认证过程

简介: 编写Java程序,用套接字编程模拟实现银行认证过程

需求说明:


某银行一核心服务器部署了一个资金交易来往的系统,为了防止黑客入侵窃取数据,该银行专门开发了一款负责安全认证的智能机器人守护服务器,对外来访问做多重身份认证。现在要求你用套接字编程模拟实现这个认证过程。(智能机器人就是负责身份认证的服务器端,而你是客户端。


50.pngimage.png



实现思路:

定义智能机器人的类,创建服务端,等待客户端连接;

定义客户端的类,去连接智能机器人这个服务端;

智能机器人被连接上以后,机器人给该客户端发送消息:enter password

客户端收到消息enter password后,给智能机器人发送密码:~!@#$%

智能机器人接收客户端消息,如果消息内容是~!@#$%,回一个消息给客户端告诉它:登录成功!,否则如果消息内容是logout,机器人主动断开连接,否则回一个消息给客户端告诉它:密码错误,登录失败!,并主动断开连接


实现代码:


服务端 RobotMain 类

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class RobotMain {
  public static void main(String[] args) throws IOException {
    // 创建 ServerScoket 实例,并在 9999 端口监听客户端
    ServerSocket server = new ServerSocket(9999);
    System.out.println("智能机器人监听在端口9999");
    // 等待客户端的连接,客户端连接后,与客户端对应一个 Socket 管道
    Socket socket = server.accept();
    String data = null;//用于保存客户端传过来的数据
    boolean flag = true;//用来判断是否循环
    while (flag) {
      /*使用socket.getInputStream()获取客户端的输入流,用来读取传来的数据
      用InputStreamReader将字节流包装成字符流
      用 BufferdReader 包装转换后的字符流*/
      BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
      BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
      writer.write("enter password");
      writer.newLine();
      writer.flush();
      System.out.println("我说:enter password");
      while ((data = reader.readLine()) != null) {
        if (data.equals("logout")) {
          flag = false;
          if (reader!=null) {
            reader.close();
          }
          if (writer!=null) {
            writer.close();
          }
          writer.write("已经成功退出");
          writer.newLine();
          writer.flush();
        }else if (data.equals("~!@#$%")) {
          System.out.println("客户端说:"+data);
          writer.write("登录成功!");
          writer.newLine();
          writer.flush();
        }else {
          System.out.println("客户端说:"+data);
          writer.write("密码错误,登录失败!");
          writer.newLine();
          writer.flush();
        }
      }
      reader.close();
      writer.close();
    }
  }
}


客户端 lientMain 类

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class lientMain {
  public static void main(String[] args) {
    try {
      // 客户端连接到本机端口号是 9999 的服务端
      Socket socket = new Socket("127.0.0.1",9999);
      String data = null;
      boolean flag = true;
      while (flag) {
        BufferedReader localreader = new BufferedReader(new InputStreamReader(System.in));
        BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        System.out.println("机器人秘书说:"+reader.readLine());
        while ((data = localreader.readLine()) != null) {
          if (data.equals("esc")) {
            flag = false;
            if (reader!=null) {
              reader.close();
            }
            if (writer!=null) {
              writer.close();
            }
            writer.write("已经成功退出");
            writer.newLine();
            writer.flush();
          }else {
            writer.write(data);
            writer.newLine();
            writer.flush();
            System.out.println("机器人秘书说:"+reader.readLine());
            System.out.print("我说:");
          }
        }
        reader.close();
        writer.close();
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}


相关文章
|
3天前
|
存储 Java 数据库连接
【YashanDB知识库】Java程序调用存储过程,在提取clob时报YAS-00004
【YashanDB知识库】Java程序调用存储过程,在提取clob时报YAS-00004
|
3天前
|
搜索推荐 Java Android开发
课时146:使用JDT开发Java程序
在 Eclipse 之中提供有 JDT环境可以实现java 程序的开发,下面就通过一些功能进行演示。 项目开发流程
|
3天前
|
Kubernetes 负载均衡 Java
k8s的出现解决了java并发编程胡问题了
Kubernetes通过提供自动化管理、资源管理、服务发现和负载均衡、持续交付等功能,有效地解决了Java并发编程中的许多复杂问题。它不仅简化了线程管理和资源共享,还提供了强大的负载均衡和故障恢复机制,确保应用程序在高并发环境下的高效运行和稳定性。通过合理配置和使用Kubernetes,开发者可以显著提高Java应用程序的性能和可靠性。
48 31
|
4天前
|
Java 编译器 开发者
注解的艺术:Java编程的高级定制
注解是Java编程中的高级特性,通过内置注解、自定义注解及注解处理器,可以实现代码的高度定制和扩展。通过理解和掌握注解的使用方法,开发者可以提高代码的可读性、可维护性和开发效率。在实际应用中,注解广泛用于框架开发、代码生成和配置管理等方面,展示了其强大的功能和灵活性。
52 25
|
6天前
|
Java C语言
课时8:Java程序基本概念(标识符与关键字)
课时8介绍Java程序中的标识符与关键字。标识符由字母、数字、下划线和美元符号组成,不能以数字开头且不能使用Java保留字。建议使用有意义的命名,如student_name、age。关键字是特殊标记,如蓝色字体所示。未使用的关键字有goto、const;特殊单词null、true、false不算关键字。JDK1.4后新增assert,JDK1.5后新增enum。
|
6天前
|
Java 编译器
课时7:Java程序基本概念(注释)
课时7介绍了Java程序中的注释。编程语言有其语法和语义,注释有助于理解代码需求,防止断档。Java支持三类注释:单行(//)、多行(/* */)和文档注释(/** */)。注释不会被编译器编译。范例中展示了如何在代码中使用注释,并强调了注释对项目文档管理的重要性。
|
6天前
|
Java 开发工具
课时5:第一个Java程序
课时5介绍了编写第一个Java程序的步骤,包括创建Hello.java文件、编写“Hello World”代码、编译和运行程序。主要内容有:1) 新建并编辑Hello.java;2) 编译Java源文件生成.class文件;3) 通过命令行解释执行Java程序;4) 解释主方法的作用及信息输出操作。本课强调了类定义、文件命名规则和基本程序结构的重要性,并建议初学者使用记事本编写代码以熟悉基础语法。
|
6天前
|
Java 开发工具
课时6:Java编程起步
课时6:Java编程起步,主讲人李兴华。课程摘要:介绍Java编程的第一个程序“Hello World”,讲解如何使用记事本或EditPlus编写、保存和编译Java源代码(*.java文件),并解释类定义、主方法(public static void main)及屏幕打印(System.out.println)。强调类名与文件名一致的重要性,以及Java程序的编译和执行过程。通过实例演示,帮助初学者掌握Java编程的基本步骤和常见问题。
|
2月前
|
传感器 安全 算法
消防救援支队消防员单兵装备智能养护舱电机驱动java版程序(二)
本文探讨消防救援中智能养护舱电机驱动的Java程序设计,作为系列文章第二部分。通过自动化和智能化手段,智能养护舱提升了装备维护效率与准确性。文章详细介绍了电机驱动模块的设计与实现,包括硬件选型、PID控制策略、安全保护机制及Java程序架构,确保电机精确控制、稳定性和安全性。未来将优化功能并引入智能算法和物联网技术,进一步提升装备维护智能化水平。
|
4月前
|
监控 安全 Java
Java中的多线程编程:从入门到实践####
本文将深入浅出地探讨Java多线程编程的核心概念、应用场景及实践技巧。不同于传统的摘要形式,本文将以一个简短的代码示例作为开篇,直接展示多线程的魅力,随后再详细解析其背后的原理与实现方式,旨在帮助读者快速理解并掌握Java多线程编程的基本技能。 ```java // 简单的多线程示例:创建两个线程,分别打印不同的消息 public class SimpleMultithreading { public static void main(String[] args) { Thread thread1 = new Thread(() -> System.out.prin

热门文章

最新文章