Java综合练习题—TCP通信协议+xml操作+序列化反序列化综合题

TCP通信协议+xml操作+序列化反序列化综合体

需求:


<?xml version="1.0" encoding="GBK"?>
<citys><city id='010'><cityname>北京</cityname><cityarea>华北</cityarea><population>2114.8万人</population></city><city id='021'><cityname>上海</cityname><cityarea>华东</cityarea><population>2,500万人</population></city><city id='020'><cityname>广州</cityname><cityarea>华南</cityarea><population>1292.68万人</population></city><city id='028'><cityname>成都</cityname><cityarea>华西</cityarea><population>1417万人</population></city>
</citys>(1)使用dom4j将信息存入xml中(2)读取信息,并打印控制台(3)添加一个city节点与子节点(4)使用socket TCP协议编写服务端与客户端,客户端输入城市ID,服务器响应相应城市信息(5)使用socket TCP协议编写服务端与客户端,客户端要求用户输入city对象,服务端接收并使用dom4j保存至XML文件

(1)–(3)问

//(1)--(3)问
public class demo1 {public static void main(String[] args) throws IOException, DocumentException {//(1)使用dom4j将信息存入xml中saveXml();//(3)添加一个city节点与子节点// editXml();// (2)读取信息,并打印控制台// show();}// (2)读取信息,并打印控制台public static void show() throws DocumentException {// 获取原有的文档对象SAXReader saxReader = new SAXReader();Document document = saxReader.read("code_hz03\\src\\ch010\\test03\\city.xml");// 获取根标签citysElement rootElement = document.getRootElement();String name = rootElement.getName();System.out.println(name);List<Element> elements = rootElement.elements();for (Element element : elements) {System.out.println("=================");// element:表示每一个city// 获取根标签citys下的每一个city的名字String name1 = element.getName();System.out.println(name1);// 获取每一个city的属性值String idText = element.attribute("id").getText();System.out.println(idText);// 获取city标签下的每一个子标签List<Element> elements1 = element.elements();for (Element element1 : elements1) {// element1:表示每一个city标签下的每一个子标签System.out.println(element1.getName());String text = element1.getText();System.out.println(text);}}}// (3)添加一个city节点与子节点public static void editXml() throws DocumentException, IOException {// 读取原有文档SAXReader saxReader = new SAXReader();Document document = saxReader.read("code_hz03\\src\\ch010\\test03\\city.xml");// 获得根标签Element rootElement = document.getRootElement();Element city = rootElement.addElement("city");// 设置新增city标签的属性值city.addAttribute("id","005");// 再给新增city标签添加子标签city.addElement("cityname").setText("郑州");// 再document对象重写写入XMLWriter xmlWriter = new XMLWriter(new FileWriter("code_hz03\\src\\ch010\\test03\\city.xml"));xmlWriter.write(document);// 释放资源xmlWriter.close();}// (1)使用dom4j将信息存入xml中public static void saveXml() throws IOException {// 获取一个空的document对象Document document = DocumentHelper.createDocument();// 添加根节点citysElement citys = document.addElement("citys");// 添加根节点citys下的子节点cityElement city1 = citys.addElement("city");// 添加city节点下的节点city1.addAttribute("id","001");city1.addElement("cityname").setText("北京");city1.addElement("cityarea").setText("华北");city1.addElement("population").setText("2114.8万人");// 添加根节点citys下的子节点cityElement city2 = citys.addElement("city");// 添加city节点下的节点city2.addAttribute("id","012");city2.addElement("cityname").setText("上海");city2.addElement("cityarea").setText("华东");city2.addElement("population").setText("2114.8万人");// 添加根节点citys下的子节点cityElement city3 = citys.addElement("city");// 添加city节点下的节点city3.addAttribute("id","003");city3.addElement("cityname").setText("广州");city3.addElement("cityarea").setText("华南");city3.addElement("population").setText("2114.8万人");// 添加根节点citys下的子节点cityElement city4 = citys.addElement("city");// 添加city节点下的节点city4.addAttribute("id","004");city4.addElement("cityname").setText("成都");city4.addElement("cityarea").setText("华西");city4.addElement("population").setText("2114.8万人");// 写出xml文件XMLWriter xmlWriter =new XMLWriter(new FileWriter("code_hz03\\src\\ch010\\test03\\city.xml"));xmlWriter.write(document);// 释放资源xmlWriter.close();}
}

第(4)问

使用socket TCP协议编写服务端与客户端,
客户端输入城市ID,服务器响应相应城市信息

public class CityClient {public static void main(String[] args) throws IOException {
/*
使用socket TCP协议编写服务端与客户端,客户端输入城市ID,服务器响应相应城市信息*/Scanner sc  = new Scanner(System.in);// 创建客户端连接对象Socket socket = new Socket("127.0.0.1",10011);// 获取字节输出流OutputStream os = socket.getOutputStream();// 输入城市idSystem.out.print("请输入城市id:");String id = sc.nextLine();// 写出os.write(id.getBytes());// 输出结束标记socket.shutdownOutput();// 服务器端若采取第一种方式读,需要在客户端 os.close();// os.close();// 接收服务器端返回的城市信息InputStream is = socket.getInputStream();byte[] bytes = new byte[1024];is.read(bytes);String msg = new String(bytes);System.out.println("msg:"+msg);}
}
========================================================public class CityServer {public static void main(String[] args) throws IOException, DocumentException {
/*
使用socket TCP协议编写服务端与客户端,客户端输入城市ID,服务器响应相应城市信息*/// 创建服务器端连接对象ServerSocket ss = new ServerSocket(10011);// 监听客户端连接Socket socket = ss.accept();// 获取字节输入流InputStream is = socket.getInputStream();//第一种读入方式,循环读取// int len;// while ((len = is.read()) != -1){//     System.out.print((char) len);// }// 第二种读入方式,一次读取多个// 定义字节数组,存储读入数据byte[] bytes = new byte[1024];is.read(bytes);// 数据来自客户端输入,将读入的数据转成字符串String id = new String(bytes).trim();System.out.println("id:"+id);// 输入结束标记socket.isInputShutdown();// 根据传入不同的id的展示不同的城市信息String cityMsg = idShow(id);// 将城市信息返回给客户端OutputStream os = socket.getOutputStream();os.write(cityMsg.getBytes());}// 读取xml文件public static String idShow(String id) throws DocumentException {// 获取解析器读取xml文件SAXReader saxReader = new SAXReader();// 获取xml文档对象Document document = saxReader.read("code_hz03\\src\\ch010\\test03\\city.xml");// 获取根标签citysElement rootElement = document.getRootElement();// 获取根标签citys下的子标签cityList<Element> elements = rootElement.elements();String msg = null;// element:表示每一个cityfor (Element element : elements) {String cityId = element.attributeValue("id");if(id.equals(cityId)){msg +="id:" +cityId;msg += "cityname:" + element.elementText("cityname");msg += "cityarea:" + element.elementText("cityarea");msg += "population:" + element.elementText("population");}return msg;}return null;}}

第(5)问

使用socket TCP协议编写服务端与客户端,
客户端要求用户输入city对象,服务端接收并使用dom4j保存至XML文件

public class City implements Serializable {private String id;private String cityname;private String cityarea;private String population;public City() {}public City(String id, String cityname, String cityarea, String population) {this.id = id;this.cityname = cityname;this.cityarea = cityarea;this.population = population;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getCityname() {return cityname;}public void setCityname(String cityname) {this.cityname = cityname;}public String getCityarea() {return cityarea;}public void setCityarea(String cityarea) {this.cityarea = cityarea;}public String getPopulation() {return population;}public void setPopulation(String population) {this.population = population;}@Overridepublic String toString() {return "City{" +"id='" + id + '\'' +", cityname='" + cityname + '\'' +", cityarea='" + cityarea + '\'' +", population='" + population + '\'' +'}';}
}
=======================================================public class CityClient {public static void main(String[] args) {/*(5)使用socket TCP协议编写服务端与客户端,客户端要求用户输入city对象,服务端接收并使用dom4j保存至XML文件*/System.out.println("======客户端=====");Scanner sc = new Scanner(System.in);try {// 创建客户端连接对象Socket socket = new Socket("127.0.0.1",10011);// 获取字节输出流OutputStream os = socket.getOutputStream();// 创建城市对象City city = new City();System.out.print("请输入城市id:");city.setId(sc.next());System.out.print("请输入城市名字:");city.setCityname(sc.next());System.out.print("请输入城市所在区域:");city.setCityarea(sc.next());System.out.print("请输入城市人口:");city.setPopulation(sc.next()+"万人");// 序列化ObjectOutputStream oos = new ObjectOutputStream(os);oos.writeObject(city);} catch (Exception e) {e.printStackTrace();}}
}
=========================================================public class CityServer {public static void main(String[] args) {/*(5)使用socket TCP协议编写服务端与客户端,客户端要求用户输入city对象,服务端接收并使用dom4j保存至XML文件*/System.out.println("服务器端");try {ServerSocket ss = new ServerSocket(10011);// 监听客户端连接Socket socket = ss.accept();InputStream is = socket.getInputStream();// 反序列化ObjectInputStream ois = new ObjectInputStream(is);// 读入反序列化的对象City city = (City) ois.readObject();// 接收对象写入返回的信息//将对象信息写入xml文件中String msg = msg(city);System.out.println(msg);} catch (Exception e) {e.printStackTrace();}}// 定义方法,将对象信息写入xml文件中public static String msg(City city){try {SAXReader saxReader = new SAXReader();Document document = saxReader.read("code_hz03\\src\\ch010\\test03\\city.xml");// 获取根标签Element rootElement = document.getRootElement();// 给根标签添加子标签cityElement city1 = rootElement.addElement("city");// 给city标签添加子标签,并设置文本值,属性值city1.addAttribute("id",city.getId());city1.addElement("cityname").setText(city.getCityname());city1.addElement("cityarea").setText(city.getCityarea());city1.addElement("population").setText(city.getPopulation());// 将document写入XMLWriter xmlWriter = new XMLWriter(new FileWriter("code_hz03\\src\\ch010\\test03\\city.xml"));xmlWriter.write(document);xmlWriter.close();return "新增成功";} catch (Exception e) {e.printStackTrace();}return "新增失败";}}

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

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

相关文章

基于python的api扫描器系统的设计与实现

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

MySQL练手题--周内每天销售情况(困难)

一、准备工作 Create table If Not Exists Orders (order_id int, customer_id int, order_date date, item_id varchar(30), quantity int); Create table If Not Exists Items (item_id varchar(30), item_name varchar(30), item_category varchar(30)); Truncate table Or…

【软件文档】软件项目试运行方案(word实际套用2024)

软件项目试运行方案&#xff08;Word原件参考&#xff09; 一、试运行目的 二、试运行的准备 三、试运行时间 四、试运行制度 五、试运行具体内容与要求 软件全套资料部分文档清单&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c…

python画图1

import matplotlib.pyplot as pltplt.rcParams["font.sans-serif"] ["SimHei"]# 模拟数据 years [2016, 2017, 2018, 2019, 2020, 2021, 2022] market_size [7950, 8931, 9940, 11205, 12305, 13199, 14980] my_color #3e9df5plt.plot(years, market_s…

《他们的奇妙时光》圆满收官,葛秋谷新型霸总获好评

9月21日&#xff0c;由王枫、张开法执导&#xff0c;周洁琼、葛秋谷领衔主演的奇幻爱情题材都市喜剧《他们的奇妙时光》圆满收官。该剧讲述了意外被游戏角色刑天附体的设计师宋灵灵&#xff0c;为修复游戏漏洞&#xff0c;被迫与能压制刑天的甲方总裁萧然同居&#xff0c;两人在…

局域网设备自动发现常用方法

文章目录 需求实现方法ARP (Address Resolution Protocol)Ping ip的流程抓包如下代码实现 mDNS 对比测试Avahi 介绍Avahi 安装Avahi 使用测试代码 需求 局域网设备自动发现是软件开发中的一个常见且重要的需求&#xff0c;它简化了设备间的协作机制&#xff0c;降低了软件各模…

MySQL内存(Buffer Pool)

Buffer Pool MySQL 的数据存在磁盘&#xff0c;但是不能每次读取数据都从磁盘里去&#xff0c;这样磁盘IO太频繁&#xff0c;存在性能问题。 InnoDB设计了一个缓存池&#xff08;Buffer Pool&#xff09;&#xff0c;缓冲池在内存中。 默认配置Buffer Pool大小为128MB&#xf…

Trapezoidal Decomposition梯形分解算法(TCD)

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言Trapezoidal Decomposition梯形分解算法&#xff08;TCD&#xff09;原理&#xff08;1&#xff09;第一种原理&#xff08;2…

DataX实战:从MongoDB到MySQL的数据迁移--修改源码并测试打包

在现代数据驱动的业务环境中&#xff0c;数据迁移和集成是常见的需求。DataX&#xff0c;作为阿里云开源的数据集成工具&#xff0c;提供了强大的数据同步能力&#xff0c;支持多种数据源和目标端。本文将介绍如何使用DataX将数据从MongoDB迁移到MySQL。 环境准备 安装MongoDB…

智慧医院人工智能应用场景 | 智能导诊系统源码

近年来&#xff0c;智能医疗在国内外的发展热度不断提升。图像识别、深度学习、神经网络、大模型、语音等关键技术的突破带来了人工智能技术新一轮的发展。 场景一&#xff1a;智能机器人 医疗机器人是指能够在医疗领域执行特定任务或功能的机器人&#xff0c;包括手术机器人、…

【LLaMa2入门】从零开始训练LLaMa2

目录 1 背景2 搭建环境2.1 硬件配置2.2 搭建虚拟环境2.2.1 创建虚拟环境2.2.2 安装所需的库 3 准备工作3.1 下载GitHub代码3.2 下载模型3.3 数据处理3.3.1 下载数据3.3.2 数据集tokenize预处理 4 训练4.1 修改配置4.2 开始训练4.3 多机多卡训练 5 模型推理5.1 编译5.1.1 安装gc…

Java算法专栏

专栏导读 在当今这个技术日新月异的时代&#xff0c;Java算法作为软件开发的核心&#xff0c;对于提升程序性能和解决复杂问题至关重要。本“Java算法”专栏旨在帮助读者深入理解Java编程语言中的算法原理和应用&#xff0c;通过实战案例和深入分析&#xff0c;使读者能够掌握…

软媒市场新探索:软文媒体自助发布,开启自助发稿新篇章

在繁华喧嚣的软媒市场中,每一个声音都在竭力呼喊,每一个品牌都在奋力展现。而软文,作为一种温柔而坚韧的营销力量,正逐渐崭露头角。特别是软文媒体自助发布平台的出现,更是为企业提供了一个全新的、高效的自助发稿渠道。 软媒市场自助发布平台,正如其名,是一个让企业能够自主发…

【LeetCode】每日一题 2024_9_21 边积分最高的节点(哈希)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动&#xff01; 题目&#xff1a;边积分最高的节点 代码与解题思路 func edgeScore(edges []int) (ans int) {// 直接维护哈希最大值即可mp : map[int]int{}for i, v : range edges {mp[v] i// 如果多个节点的 边积分 相…

【数据库】常用数据库简介

目录 &#x1f354; 常用的关系型数据库 &#x1f354; Mysql简介 &#x1f354; SQL 简介 SQL语句的分类 SQL 写法 SQL 常用的数据类型 &#x1f354; DDL语句 对数据库的操作 对数据表的操作 &#x1f354; DML语句 插入数据 insert into 修改数据 update 删除数…

Ubuntu下使用 python搭建服务实现从web端远程配置设备网口

1、通过文件配置Ubuntu设备网口 在Ubuntu工控机上&#xff0c;通过文件配置网口&#xff08;网络接口&#xff09;可以让网络配置在每次系统启动时自动生效。以下是常见的方法步骤&#xff1a; 1.1 使用 netplan 配置网口&#xff08;Ubuntu 18.04 及以上版本&#xff09; 编…

探索微软Copilot Agents:如何通过Wave 2 AI彻底改变工作方式

微软在最近的Copilot Wave 2发布会上&#xff0c;展示了一系列将彻底改变日常工作流程的新AI功能&#xff0c;尤其是 Copilot Agents&#xff0c;它们不仅仅是简单的工具&#xff0c;而是真正的工作助理&#xff0c;可以自动完成任务、提供智能分析并帮助你做出决策。这些新功能…

Day6:反转链表

题目&#xff1a;给你单链表的头节点head&#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 输入&#xff1a;head[1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] public ListNode reverseList() {if (head null) {return head;}ListNode cur head.next;head.next null…

Python脚本每日自动备份MySQL数据库,无需mysqldump

编写一个Python脚本&#xff0c;每天凌晨3点开始备份 脚本具有以下特点 不需要安装mysql-client&#xff0c;并且Windows Linux都可以使用支持多个数据库连接的备份每个数据库支持多个表备份日志保存下来&#xff0c;方便第二天早上查看备份结果 首先安装需要的库 pip3 ins…

调节 PWM的占空比控制舵机的角度

一、PWM工作原理 让计数器从0数到自动重装载值&#xff0c;不停计数。计数值小于输出比较寄存器时输出一种电平&#xff0c;大于输出比较寄存器时使出另一种电平。 修改定时器时钟源的速度以及预分频器等设置&#xff0c;可以修改计数器计数的速度 再加上修改自动重装载值&…