当前位置: 首页 > news >正文

实验六:Java流式编程与网络程序设计

一、字节输入/输出流实现数据的保存和读取

编程要求

根据提示,在右侧编辑器补充代码。 编写应用程序(SortArray.java),使用字节输入/输出流实现数据的保存和读取。 要求功能如下:

  • 输入1~100之间的整型数据保存到数组(数组大小为10)中
  • 将数组排序(由小到大)后的元素保存到指定的文件中
  • 如果文件不存在,则创建文件
  • 从文件中读取排序后的元素并按指定格式输出
  • 利用异常处理机制处理可能发生的错误

测试说明

平台会对你编写的代码进行测试:

测试输入:70 94 21 43 76 60 70 37 75 80

预期输出: 21<37<43<60<70<70<75<76<80<94

代码

package step2;
import java.io.*;
import java.util.Scanner;public class Encrypt {public static void main(String[] args) throws IOException {// 创建要发送的电报Scanner sc = new Scanner(System.in);String data = sc.next();// 将电报分割成字符数组/********** Begin **********/char[] area = data.toCharArray();/********** End **********/// 打开指定存放电报的文件,如果文件不存在,则创建File file = new File("data.txt");if (!file.exists()) {file.createNewFile();}// 循环遍历字符数组,将每个字符加密处理for (int i = 0; i < area.length; i++) {area[i] = (char) (area[i] ^ 'q');}// 利用字符输出流FileWriter将加密后的字符数组写入文件中/********** Begin **********/FileWriter fw = new FileWriter(file);fw.write(area);fw.flush();fw.close();/********** End **********/// 利用字符输入流FileReader读取文件,将密文输出/********** Begin **********/FileReader fr1 = new FileReader(file);char[] buf1 = new char[10];int n;System.out.println("密文:");while ((n = fr1.read(buf1)) != -1) {String s = new String(buf1);System.out.print(s);}System.out.println();fr1.close();/********** End **********/// 利用字符输入流FileReader读取文件,将密文转换为明文输出/********** Begin **********/FileReader fr2 = new FileReader(file);char[] buf2 = new char[10];System.out.println("明文:");while ((n = fr2.read(buf2)) != -1) {for (int i = 0; i < n; i++) {buf2[i] = (char) (buf2[i] ^ 'q');}String s = new String(buf2);System.out.print(s);}fr2.close();/********** End **********/}
}

二、字符输入/输出流实现发送电报

编程要求

根据提示,在右侧编辑器补充代码。

  • 电报内容经过加密后使用字符输出流存储在指定的文件中
  • 如果文件不存在,则创建文件
  • 使用字符输入流从文件中分别读取密文和明文的内容并显示出来
  • 利用异常处理机制处理可能发生的错误

注意:在对字符加密时采用了异或(^q)的简单字符加密处理,解密时也要进行逐个字符异或(^q)的处理。

测试说明

平台会对你编写的代码进行测试:

测试输入: 今晚10点发动总攻

预期输出: 密文: 亻昫@A烈厠務恊敊 明文: 今晚10点发动总攻

代码

package step2;
import java.io.*;
import java.util.Scanner;public class Encrypt {public static void main(String[] args) throws IOException {// 创建要发送的电报Scanner sc = new Scanner(System.in);String data = sc.next();// 将电报分割成字符数组/********** Begin **********/char[] area = data.toCharArray();/********** End **********/// 打开指定存放电报的文件,如果文件不存在,则创建File file = new File("data.txt");if (!file.exists()) {file.createNewFile();}// 循环遍历字符数组,将每个字符加密处理for (int i = 0; i < area.length; i++) {area[i] = (char) (area[i] ^ 'q');}// 利用字符输出流FileWriter将加密后的字符数组写入文件中/********** Begin **********/FileWriter fw = new FileWriter(file);fw.write(area);fw.flush();fw.close();/********** End **********/// 利用字符输入流FileReader读取文件,将密文输出/********** Begin **********/FileReader fr1 = new FileReader(file);char[] buf1 = new char[10];int n;System.out.println("密文:");while ((n = fr1.read(buf1)) != -1) {String s = new String(buf1);System.out.print(s);}System.out.println();fr1.close();/********** End **********/// 利用字符输入流FileReader读取文件,将密文转换为明文输出/********** Begin **********/FileReader fr2 = new FileReader(file);char[] buf2 = new char[10];System.out.println("明文:");while ((n = fr2.read(buf2)) != -1) {for (int i = 0; i < n; i++) {buf2[i] = (char) (buf2[i] ^ 'q');}String s = new String(buf2);System.out.print(s);}fr2.close();/********** End **********/}
}

三、简单TCP通信

编程要求

根据提示,在右侧编辑器补充代码,使用Socket和ServerSocket套接字编程,完成简单的TCP通信。

测试说明

平台会对你编写的代码进行测试:

测试输入:张三

预期输出: 你已经连上服务器了,告诉我你的姓名... 再见:张三

代码

package step3;import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;public class Client {public static void main(String[] args) throws Exception {Server server = new Server();server.start();Scanner sc = new Scanner(System.in);//创建客户端Socket(s),指定服务器端IP地址和端口号/********** Begin **********/Socket s = new Socket("127.0.0.1", 8000);/**********  end  **********/DataOutputStream dos = new DataOutputStream(s.getOutputStream());DataInputStream dis = new DataInputStream(s.getInputStream());System.out.println(dis.readUTF());String name = sc.next();dos.writeUTF(name);System.out.println(dis.readUTF());s.close();}
}
package step3;import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;public class Server extends Thread {@Overridepublic void run() {try {//创建服务器端ServerSocket(ss),指定端口号8000/********** Begin **********/ServerSocket ss =new ServerSocket(8000);/**********  end  **********/Socket s = ss.accept();DataOutputStream dos = new DataOutputStream(s.getOutputStream());DataInputStream dis = new DataInputStream(s.getInputStream());dos.writeUTF("你已经连上服务器了,告诉我你的姓名...");String name = dis.readUTF();dos.writeUTF("再见:" + name);s.close();} catch (IOException e) {e.printStackTrace();}}
}

四、TCP通信实现奇偶数判断

编程要求

根据提示,在右侧编辑器补充代码,对输入的整数进行奇偶性判断;当输入的整数为-1时,程序结束运行。

测试说明

平台会对你编写的代码进行测试:

测试输入:1 2 3 4 -1

预期输出: 请输入一个整数,我知道是奇数还是偶数 1是...奇数 2是...偶数 3是...奇数 4是...偶数

代码

 package step4;import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;public class ClientPlus {public static void main(String[] args) {Scanner sc = new Scanner(System.in);ServerPlus server = new ServerPlus();server.start();try {//创建客户端Socket(s),指定服务器端IP地址和端口号/********** Begin **********/Socket s = new Socket("127.0.0.1", 8000);/**********  end  **********/DataOutputStream dos = new DataOutputStream(s.getOutputStream());DataInputStream dis = new DataInputStream(s.getInputStream());//客户端通过循环依次接收服务器返回的结果,并输入新的整数传递给服务器/********** Begin **********/while(true){System.out.println(dis.readUTF());String num = sc.next();dos.writeUTF(num);}/**********  end  **********/} catch (EOFException e) {} catch (IOException e) {e.printStackTrace();}}
}
package step4;import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;public class ServerPlus extends Thread {@Overridepublic void run() {try {/********** Begin **********///创建服务器端ServerSocket(ss),指定端口号8000ServerSocket ss = new ServerSocket(8000);/**********  end  **********/Socket s = ss.accept();DataOutputStream dos = new DataOutputStream(s.getOutputStream());DataInputStream dis = new DataInputStream(s.getInputStream());ReceiveThread thread = new ReceiveThread(s, dos, dis);thread.start();} catch (IOException e) {e.printStackTrace();}}
}
 package step4;import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.SocketException;class ReceiveThread extends Thread {DataOutputStream dos;DataInputStream dis;Socket s;public ReceiveThread(Socket s, DataOutputStream dos, DataInputStream dis) {this.s = s;this.dos = dos;this.dis = dis;}@Overridepublic void run() {try {dos.writeUTF("请输入一个整数,我知道是奇数还是偶数");while(true) {String num = dis.readUTF();if("-1".equals(num)) {s.close();break;} String result = (Integer.parseInt(num)%2==0)?"偶数":"奇数";dos.writeUTF(num + "是..." + result);}			} catch (SocketException e) {try {s.close();} catch (IOException e1) {e1.printStackTrace();}} catch (IOException e) {System.out.println("数据读取异常");} }	
}

http://www.lryc.cn/news/247618.html

相关文章:

  • 金字塔原理
  • VR全景技术助力政务服务大厅数字化,打造全新政务服务体验
  • 使用Python实现SVM来解决二分类问题
  • 合并PDF出现OOM异常
  • c语言-数据结构-链式二叉树
  • DelayQueue介绍
  • centos8 redis 6.2.6源码安装+主从哨兵
  • 机器学习之危险品车辆目标检测
  • DHCP协议及实验omnipeek抓包工具分析 IPv4协议
  • 考过了PMP,面试的时候应该怎么办?
  • 技巧-PyTorch中num_works的作用和实验测试
  • Android:FragmentTransaction
  • 5.golang字符串的拆解和拼接
  • 配置 Mantis 在 Windows 上的步骤
  • Android 单元测试初体验(二)-断言
  • 通过ros系统中websocket中发送sensor_msgs::Image数据给web端显示
  • 【 Kubernetes 风云录 】- Istio 应用多版本流量控制
  • 比尔盖茨:GPT-5不会比GPT-4好多少,生成式AI已达到极限
  • let const 与var的区别
  • git 把项目托管到码云
  • sCrypt 现已支持各类主流前端框架
  • leetcode:2549. 统计桌面上的不同数字(python3解法)
  • 数据结构 / day03作业
  • 异步爬虫提速实践-在Scrapy中使用Aiohttp/Trio
  • Python与设计模式--访问者模式
  • 为社会做贡献的EasyDarwin 4.0.1发布了,支持视频点播、文件直播、摄像机直播、直播录像、直播回放、录像MP4合成下载
  • CG向量和矩阵元素的获取
  • 牛客 算法题 golang语言实现
  • 鸿蒙开发报错:agconnect sdk not initialized. please call initialize()【BUG已解决】
  • 极智芯 | 解读国产AI算力算能产品矩阵