需求说明:

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

实现思路:

  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. tableView和tableViewCell的背景颜色问题

    当在tableView中添加cell数据时,我们会发现原本设置的tableView的背景颜色不见了,这是因为加载cell数据时,tableView的背景颜色被cell数据遮盖住了,此时,可以通过设置c ...

  2. vue2 安装打包部署

    vue2项目搭建记录 mkdir -p /opt/wks/online_pre/1006cd /opt/wks/online_pre/1006mkdir hongyun-ui /opt/code/vu ...

  3. linux 加密安全之AWK

    密钥 密钥一般是一串字符串或数字,在加密或者解密时传递给加密或者解密算法,以使算法能够正确对明文加密或密文解密. 加密算法 已知的加密算法有对称和非对称加密,也就是说你想进行加解密操作的时候需要具备密 ...

  4. Java Timestamp 类的使用

    很简单,我们可以这样声明 Timestamp ts=new Timestamp(new Date().getTime());这样我们就可以得到时间比较具体的一个类型转换!!! 在开发web应用中,针对 ...

  5. 【笔记】草履虫也能看懂的ELK搭建流程

    环境需要 Elasticsearch需要JAVA环境,至少是JDK1.8 elasticsearch 不允许root用户使用,需要新增个elk用户 如果觉得官网下载太慢,可以使用这个 https:// ...

  6. python f-strings !表达式

    近期看一些框架的文档时发现, python的f-strings有f"{xxx!r}"的写法, 就官网看了一波文档, 特此记录一下, 顺便完善一下f-strings的使用 f-str ...

  7. Jenkins环境变量

    目录 一.环境变量 二.自定义环境变量 三.自定义全局变量 四.常用变量定义 五.常用环境变量 一.环境变量 环境变量可以被看作是pipeline与Jenkins交互的媒介.比如,可以在pipelin ...

  8. 如何查看Python中所有关键字

    一.保留字即关键字,我们不能把它们用作任何标识符名称.Python的标准库提供了一个keyword模块,可以输出当前版本的所有关键字 import keyword print(keyword.kwli ...

  9. [BUUCTF]REVERSE——firmware

    firmware 附件 步骤: 检查文件没有看出什么,ida载入一堆乱码,看了其他师傅的wp才知道要先binwalk对文件进行提取 120200.squashfs这是一个linux的压缩文件 我们需要 ...

  10. LuoguP7375 [COCI2018-2019#5] Jarvis 题解

    Content 有 \(n\) 架无人机,每架无人机都有一个当前属性值 \(a_i\) 和出战属性值 \(b_i\).你可以给每架无人机的当前属性值同时加一个数 \(x\)(但只能做一次),使得能够出 ...