需求说明:

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

实现思路:

  1. 定义智能机器人的类,创建服务端,等待客户端连接;
  2. 定义客户端的类,去连接智能机器人这个服务端;
  3. 智能机器人被连接上以后,机器人给该客户端发送消息:enter password
  4. 客户端收到消息enter password后,给智能机器人发送密码:~!@#$%
  5. 智能机器人接收客户端消息,如果消息内容是~!@#$%,回一个消息给客户端告诉它:登录成功!,否则如果消息内容是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();
}
} }

编写Java程序,用套接字编程模拟实现银行认证过程的更多相关文章

  1. 编写Java程序,跑道长 50m,模拟 3 名学生同时在跑道跑步的场景 3名同学相当于3个线程对象

    查看本章节 查看作业目录 需求说明: 跑道长 50m,模拟 3 名学生同时在跑道跑步的场景 3名同学相当于3个线程对象 实现思路: 创建 Java 项目,在项目中创建StudentRunning类,该 ...

  2. TCP和UDP套接字编程 (java实现)

    在了解网络编程之前,我们先了解一下什么叫套接字 套接字即指同一台主机内应用层和运输层之间的接口 由于这个套接字是建立在网络上建立网络应用的可编程接口 因此也将套接字称为应用程序和网络之间的应用程序编程 ...

  3. C# 套接字编程:Scoket,我用Scoket做的C# Windows应用程序如下:

    首先请允许我做一个截图: 以上,是我服务端设计 我们知道:服务器端口数最大可以有65535个,但是实际上常用的端口才几十个,由此可以看出未定义的端口相当多.因此,我们可以通过程序随机获取一个当前可用的 ...

  4. (转载)Linux 套接字编程中的 5 个隐患

    在 4.2 BSD UNIX® 操作系统中首次引入,Sockets API 现在是任何操作系统的标准特性.事实上,很难找到一种不支持 Sockets API 的现代语言.该 API 相当简单,但新的开 ...

  5. 基本套接字编程(7) -- udp篇

    1. UDP概述         UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互 ...

  6. 初探网络编程--TCP套接字编程演示

    今天看了一下<计算机网络:自顶向下方法>,也就是计算机网络的教材的应用层一章,决定实现以下后面的Java C/S应用程序的例子,用来演示TCP和UDP套接字编程. 程序流程如下: 1.一台 ...

  7. 基本套接字编程(1) -- tcp篇

    1. Socket简介 Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换. 几个定义: (1)IP地址:即依照TCP/IP协议分配给本地主机 ...

  8. 套接字编程(VC_Win32)

    简介(源于维基) Berkeley套接字(也作BSD套接字应用程序接口)刚开始是4.2BSD Unix操作系统(于1983发布)的一套应用程序接口.然而,由于AT&T的专利保护着UNIX,所以 ...

  9. JavaTCP和UDP套接字编程

    在我们刚开始入门Java后端的时候可能你会觉得有点复杂,包含了很多杂七杂八的知识,例如文件上传下载,监听器,JDBC,请求重定向,请求转发等等(当然也没有很多),但是我们自己真正的去开发一个小型网站( ...

随机推荐

  1. 链栈(C++)

    链栈,字面意思,就是用链表来实现一个栈的数据结构. 那么,只需将单链表的头节点当作栈顶,尾节点当作栈底.入栈只需要头插,出栈只需头删即可.所以只需要吧单链表稍微阉割一下就可以得到链式栈了.代码如下 / ...

  2. DP-Burst Balloons

    leetcode312: https://leetcode.com/problems/burst-balloons/#/description Given n balloons, indexed fr ...

  3. 利用extern共享全局变量

    方法: 在xxx.h中利用extern关键字声明全局变量 extern int a; 在xxx.cpp中#include<xxx.h> 再定义 int a; 赋不赋初值无所谓,之后该全局变 ...

  4. Swift3.0 延时执行

    //延时1s执行 DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + Double(Int64(1*NSEC_PER_SEC))/ ...

  5. VFL

    VFL 1. 概念 VFL全称是Visual Format Language,翻译过来是"可视化格式语言" VFL是苹果公司为了简化Autolayout的编码而推出的抽象语言 2. ...

  6. Dubbo服务限流

    为了防止某个消费者的QPS或是所有消费者的QPS总和突然飙升而导致的重要服务的失效,系统可以对访问流量进行控制,这种对集群的保护措施称为服务限流. Dubbo中能够实现服务限流的方式较多,可以划分为两 ...

  7. 微软开源的Web测试和自动化神器 Playwright

    Playwright 是微软开源的一个用于 Web 测试和自动化的框架, 提供了可靠的端到端测试, 功能非常强大, 可以在测试, 爬虫,自动化场景中使用. 跨浏览器 Playwright 支持所有现代 ...

  8. Redis哨兵 部署和配置

    目录 一.哨兵简介 哨兵介绍 哨兵原理 二.哨兵部署 环境介绍 哨兵配置 三.使用验证 一.哨兵简介 哨兵介绍 Sentinel(哨兵)是用于监控redis集群中Master状态的工具,其已经被集成在 ...

  9. canvas绘制圣诞树

    最近不知道咋的都玩起了用备忘录手绘圣诞树,作为万能的程序员,肯定也要跟上潮流,那用代码来实现圣诞树吧.哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈 实现效果如下: ...

  10. [BUUCTF]REVERSE——[SUCTF2019]SignIn

    [SUCTF2019]SignIn 附件 步骤: 无壳,64位ida载入 程序调用了 __gmpz_init_set_str 函数,这是一个 GNU 高精度算法库,在RSA加密中见过几次,加上6553 ...