字符串反转-课后程序(JAVA基础案例教程-黑马程序员编著-第九章-课后作业)

news2024/9/23 3:28:36

【案例9-2】  字符串反转

【案例介绍】

1.案例描述

在使用软件或浏览网页时,总会查询一些数据,查询数据的过程其实就是客户端与服务器交互的过程。用户(客户端)将查询信息发送给服务器,服务器接收到查询消息后进行处理,将查询结果返回给用户(客户端)。本案例要求编写一个模拟客户端与服务端交互的程序,客户端向服务器传递一个字符串(键盘录入),服务器将字符串反转后写回,客户端再次接收到的是反转后的字符串。本案例要求使用多线程与TCP通信相关知识完成数据交互。

2.运行结果

 

【案例分析】

(1)根据任务描述可以知道该程序用TCP通信技术实现,所以第一条就是定义客户端,键盘录入数据定义Scanner来实现,然后创建客户端指定IP地址和端口号,之后获取输出流,与输入流,最后将字符串写到服务器并将反转后的结果读出来打印在控制台。

(2)实现服务端的代码编写,首先创建服务端绑定客户端的端口号,并用Server的accept()方法接受客户端的请求。

(3)服务端定义run()方法实现之后获取输入输出流,将客户端发送过来的数据读取出来并采用链式编程的思想将字符串反转后返回到客户端。

【案例实现】

(1)创建客户端,用于录入输入的数据。其代码具体如下所示。

Client.java

  1. package chapter0902;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.io.PrintStream;
  6. import java.net.Socket;
  7. import java.net.UnknownHostException;
  8. import java.util.Scanner;
  9. public class Client {
  10.       public static void main(String[] args) throws UnknownHostException,
  11.                                                         IOException {
  12.          //创建键盘录入对象
  13.         Scanner sc = new Scanner(System.in);         
  14.          //创建客户端,指定ip地址和端口号   
  15.         Socket socket = new Socket("127.0.0.1", 54321);       
  16.         BufferedReader br = new BufferedReader(new
  17.          InputStreamReader(socket.getInputStream()));    //获取输入流
  18.          //获取输出流
  19.         PrintStream ps = new PrintStream(socket.getOutputStream());
  20.          //将字符串写到服务器去
  21.         ps.println(sc.nextLine());                       
  22.         System.out.println(br.readLine()); //将反转后的结果读出来
  23.         socket.close();
  24.     }
  25. }

上述代码中,第14行代码创建客户端指定IP地址与端口号,第15~18行代码获取输入与输出流,第20行代码用于将字符串写到服务器中去。第21行代码用于将反转后的结果读取出来。

(2)创建服务端实现将客户端数据反转并返回到客户端,其代码如下所示。

Server.java

  1. package chapter0902;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.io.PrintStream;
  6. import java.net.ServerSocket;
  7. import java.net.Socket;
  8. public class Server {
  9.     public static void main(String[] args) throws IOException {
  10.         ServerSocket server = new ServerSocket(54321);
  11.         System.out.println("服务器启动,绑定54321端口");
  12.         while(true) {
  13.            final Socket socket = server.accept(); //接受客户端的请求
  14.            new Thread() {     //开启一条线程
  15.                public void run() {
  16.                    try {
  17.                        BufferedReader br = new BufferedReader(new
  18.                             InputStreamReader
  19.                             (socket.getInputStream())); //获取输入流
  20.                        PrintStream ps = new  PrintStream
  21.                            (socket.getOutputStream());//获取输出流
  22.                             //将客户端写过来的数据读取出来
  23.                          String line = br.readLine();
  24.                        line = new StringBuilder(line).
  25.                             reverse().toString();  //链式编程
  26.                        ps.println(line);  //反转后写回去
  27.                        socket.close();
  28.                    } catch (IOException e) {                    
  29.                        e.printStackTrace();
  30.                    }
  31.                }
  32.            }.start();
  33.         }
  34.     }
  35. }

上述代码中,第9行代码用于创建Server服务器绑定端口号。第12行代码用Server的accept()方法来接收客户端的请求。第22行代码用readLine()方法将客户端写过来的数据读取出来,第23~24行代码用链式编程的方式将字符串反转,第25行代码将反转后的字符串返回给客户端打印。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/377302.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中国版ChatGPT高潮即将到来,解密ChatGPT底层网络架构

2022年11月30日人工智能研究实验室OpenAI发布全新聊天机器人ChatGPT,在中国用户无法访问的前提下,上线仅两个月月活用户就突破了1亿。ChatGPT如同重磅炸弹,一时间火遍全球。面对这一万亿级市场机遇,在国内,无论是资本方…

2.28性能测试概念

一.自动化测试的亮点1)使用注解:避免生成过多对象,造成资源和时间的浪费2)通过static修饰静态变量,全局只创建了一次驱动对象,在测试前再卸载驱动.避免重复创建驱动对象造成时间和资源的浪费3)通过使用参数化,保持用例的简洁,提高了代码的可读性.4)使用测试套件:一次性执行所有…

2022年AI顶级论文 —生成模型之年(下)

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 过去十年来,人工智能技术在持续提高和飞速发展,并不断冲击着人类的认知。 2012年,在ImageNet图像识别挑战赛中,一种神经网络模型(AlexNet&am…

流媒体付服务器 ZLMediaKit 学习记录

1.官方github:ZLMediaKit 依赖于 media-server 库 #国内用户推荐从同步镜像网站gitee下载 git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit cd ZLMediaKit #千万不要忘记执行这句命令 git submodule update --init 之后 cd ZLMediaKit mkdir build…

嵌入式软件自动化测试的趋势

现在软件市场越来越推崇敏捷开发和持续交付,要在这样的环境下取得竞争优势,各个企业必须得开发出稳健的应用程序,为用户提供无可比拟的直观体验。而且,这些应用程序还要能够达到组织机构的业务目标。 自动化测试的重要意义 在这个竞争日益激…

和钟南山院士合影,被人民日报缅怀,吴孟达骨灰葬在马来西亚成谜

不知不觉当中,香港著名演员吴孟达,已经离开人世间两年了,可是关于他的话题却依然没有停息。在影迷的记忆里,吴孟达是星爷的黄金搭档,两个人曾经一起携手,拍摄出来很多部优秀的影视剧。 时光荏苒&#xff0c…

Revit中复合墙图层的规则和CAD识别翻模墙

一、Revit中用于指定复合墙图层的规则,具体内容? 在编辑复合墙的结构时,请使用“指定图层”工具将“编辑部件”对话框中的行指定给图层或预览窗格中的区域,并遵循这些原则。 在预览窗格中,样本墙的各个行必须保持从左到右的顺序显…

面试了1个自动化测试,开口40W年薪,只能说痴人做梦...

公司前段缺人,也面了不少测试,结果竟然没有一个合适的。一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资在10-20k,面试的人很多,但平均水平很让人失望。看简历很多都是3年工作经验,但面试…

Docker前端工程npm平滑过渡到pnpm v7的姿势

前言 pnpm挺多优点的,比如安装依赖速度很快,命令行也可以少打几个字符; 标题为啥说平滑,就是尽可能的少破坏性的迁移【针对现有的工程的改造】, 但是又能受用到pnpm的部分特性,使其效益符合我们的期望即可…

RK3588平台开发系列讲解(系统篇)init.d介绍

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、Linux启动简介二、sysvinit配置三、inid.d介绍沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇介绍init.d相关知识。 一、Linux启动简介 Linux用户空间启动时,第一个会启动init进程,用来引导启动其…

0101基础-认证授权-springsecurity

文章目录1 基础概念1.1 认证1.2 会话1.3 jwt1.4 授权2 授权的数据模型3 RBAC3.1 基于角色的访问控制3.2 基于资源的访问控制4 名词解析4.1 SSO4.2 CAS4.3 联合登陆4.4 多端登录:同一账号不同终端登录4.5 OAuth1 基础概念 1.1 认证 认证是为了保护系统的隐私数据和…

【高数】不定积分之有理函数的积分

文章目录前言有理函数积分的通用解法有理函数的特殊解法前言 这个专栏开始更新高等数学的解题方法,本专栏没有特别强调概念,主要是让大家熟悉考研中的一些题型以及如何求解 关键步骤用蓝色高亮提示 总结方法用红色高亮提示 注意事项用绿色高亮提示 希望…

【数据库】数据库基本概念和类型

一、数据库基本概念 1、数据 所谓数据(Data)是指对客观事物进行描述并可以鉴别的符号,这些符号是可识别的、抽象的。它不仅仅指狭义上的数字,而是有多种表现形式:字母、文字、文本、图形、音频、视频等。现在…

MAML算法详解(元学习)

文章目录回顾元学习MAML算法MAML和预训练模型的区别数学推导MAML实施细节总结回顾元学习 元学习的基本知识参考这篇博客元学习和机器学习的对比 MAML算法 学习初始化参数,所有任务的初始化的参数都是一样的 MAML和预训练模型的区别 MAML使用的是ϕ\phiϕ…

计算机网络笔记、面试八股(五)—— 浏览器输入URL

本章目录5. 从输入URL到浏览器显示页面过程中都发生了什么5.1 URL输入5.2 DNS解析5.2.1 域名的等级5.2.2 DNS解析的流程5.2.3 DNS查询方式5.3 建立TCP连接5.4 发送HTTP/HTTPS请求5.5 服务器处理请求并返回HTTP响应5.6 浏览器解析渲染页面5.7 HTTP请求结束,断开TCP连…

【C语言】“qsort函数详解”与“使用冒泡思想模拟使用qsort”

✨✨✨✨如果文章对你有帮助记得点赞收藏关注哦!!✨✨✨✨ 文章目录✨✨✨✨如果文章对你有帮助记得点赞收藏关注哦!!✨✨✨✨qsort的介绍:一、qsort函数的使用✨比较int类型数据比较字符型数据比较结构体数据冒泡思想…

2023湖北土建施工员证报考条件考试时间及报考流程 启程别

2023湖北土建施工员证报考条件考试时间及报考流程 启程别 土建施工员证是建设厅七大员中的施工员证的一种。分为土建、装饰装修、市政、设备安装。土建施工员证怎么报考等一系列相关问题启程别告诉你 施工员证报考条件 其实施工员证的报考条件没有那么复杂,基本上年…

一起学习 学习二叉树

前言 树是数据结构中的重中之重,尤其以各类 二叉树为学习的难点。一直以来,对于树的掌握都是模棱两可的状态,现在希望通过写一个关于二叉树的专题系列。在学习与总结的同时更加深入的了解掌握二叉树。本系列文章将着重介绍一般二叉树、完全二…

算法设计与分析期末考试复习(六)

分支限界法 广度优先搜索:处理某顶点时,一次性发现其所有相邻顶点,未处理顶点加入等待队列 先来先服务:队尾加入,队首离开 o 加入队列,𝑸. Enqueue( ) o 离开队列,𝑸. …

【设计模式】6.代理模式

概述 代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理访问目标对象 这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。 被代理的对象可以是:远程对象、创建开销大的对象或需要安全…