首页 > 编程语言 >实验六 Java流式编程与网络程序设计

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

时间:2024-05-27 19:23:31浏览次数:21  
标签:Java Socket java 编程 流式 io new import DataOutputStream

第1关 字节输入/输出流实现数据的保存和读取

package step1;

import java.io.*;
import java.util.*;

public class SortArray {

	public static void main(String[] args) {
        /********** Begin **********/
		// 创建保存整型数据的数组(数组大小10)
        int[] data = new int[10];
	
		// 给数组赋随
        Scanner sc = new Scanner(System.in);
		for (int i = 0; i < data.length; i++) {
			data[i] = sc.nextInt();
		}
		// 将数组元素按有小到大顺序排列
		Arrays.sort(data);
		
		try {
			// 创建数据保存文件,如果文件不存在,重新创建
			File file = new File("data.txt");
			if (!file.exists()) {
				file.createNewFile();
			}
			// 创建FileOutputStream和DataOutputStream 输出流
			FileOutputStream fout = new FileOutputStream(file);
			DataOutputStream dout = new DataOutputStream(fout);

			// 利用输出流向文件中写入数组数据
			for (int i =0;i<data.length;i++){
				dout.writeInt(data[i]);
			}

			// 关闭输出流
            dout.close();


			// 创建FileInputStream和DataInputStream 输入流
            FileInputStream fout2 = new FileInputStream(file);
			DataInputStream dout2 = new DataInputStream(fout2);


			// 利用输入流从文件读取数据并输出
            for (int i =0;i<data.length;i++){
				data[i]=dout2.readInt();
				if(i==data.length-1){
					System.out.print(data[i]);
				}else {
					System.out.print(data[i]+"<");
				}
			}


			// 关闭输入流
            dout2.close();
            
		} catch (IOException e) {
			// 异常处理
			System.out.println("读写发生异常");
		}
        /********** End **********/
	}
}

第2关 字符输入/输出流实现发送电报

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[] a = data.toCharArray();


        /********** End **********/

        // 打开指定存放电报的文件,如果文件不存在,则创建
        File file = new File("data.txt");
        if(!file.exists()) {
        	file.createNewFile();
        }
        
        // 循环遍历字符数组,将每个字符加密处理
        for (int i = 0; i < a.length; i++) {
            a[i] = (char) (a[i] ^ 'q');
        }

        // 利用字符输出流FileWriter将加密后的字符数组写入文件中
        /********** Begin **********/
        FileWriter out =new FileWriter(file);
         out.write(a,0,a.length);
         out.flush();
         out.close();
        

        /********** End **********/


        
        // 利用字符输入流FileReader读取文件,将密文输出
        /********** Begin **********/
        int n;
        FileReader in1 =new FileReader(file);
        char[]buf=new char[10];
        System.out.println("密文:");
        while (( n =in1.read(buf))!=-1){
            String s=new String(buf);
            System.out.print(s);
        }
        in1.close();
        

        /********** End **********/



        
        // 利用字符输入流FileReader读取文件,将密文转换为明文输出       
        /********** Begin **********/
         FileReader in2 =new FileReader(file);
        System.out.println("\n明文:");
        while ((n = in2.read(buf))!=-1){
            for (int i = 0; i < n; i++) {
                buf[i]= (char)(buf[i] ^'q');
            }
            String s= new String(buf);
            System.out.print(s);
        }
        in2.close();
        

        /********** End **********/    
        
        
    }
}

第3关 简单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 {

    @Override
    public 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();
        }
    }
}

第4关 TCP通信实现奇偶数判断

客户端

 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 {
	@Override
	public void run() {
		try {
			
            /********** Begin **********/
            //创建服务器端ServerSocket(ss),指定端口号8000
            ServerSocket 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;
	}
	@Override
	public 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("数据读取异常");
		} 
	}	
}

标签:Java,Socket,java,编程,流式,io,new,import,DataOutputStream
From: https://www.cnblogs.com/Xqiao/p/18216297

相关文章

  • 《TCP/IP网络编程》(第十章)多进程服务器端(2)
    基于进程的并发服务器我们将扩展之前的回声服务器,使其可以同时向多个客户端体提供服务,实现模型如下图所示即每当有客户端向服务器请求服务时,服务器端都创建一个子进程为其提供服务,比如有5个客户端请求服务,则创建个5子进程。通过fork()复制的文件描述符下图是父进程调用......
  • ubuntu java版本间切换
    今天在编译rk3288安卓5.1时出错,提示需要java1.7.x版本的jdk,而我的ubuntu默认已经安装了java 1.8.0_362版本,下面介绍下我是如何进行java版本切换的。1.从官网上下载得到java 1.7.0_80压缩包(找个QQ邮箱注册账号后就可以直接下载了)https://www.oracle.com/java/technol......
  • java泛型
    java泛型本人自建博客添砖java文章目录java泛型基本理解语法经典案例自定义泛型类自定义泛型接口自定义泛型方法泛型的继承和通配符通配符基本理解基本理解:就像类是对对象的抽象,泛型就是对类型的抽象,其作用类似于c++的模板语法泛型的声明:interface接......
  • Java HelloWorld实现
    第一个博客,当然从HelloWorld开始,主要测试下CDDN的代码高亮效果如何。下面上代码:`packagecom.gzymz.demo;/**测试@authorAdministrator*/publicclassHelloWorld{publicstaticvoidmain(String[]args){System.out.println("HelloWorld,公子云梦泽!");}}`emm......
  • 编程常识
    以下是写在script里的代码,首先是变量,变量的关键字为let。//1.变量letemail="[email protected]";//letemail(声明)+email(初始化)=声明+初始化//letemail;声明只要不赋值,则默认值为undefined,第一次赋值叫初始化,[email protected](赋值)//更新或者叫修......
  • java调用科大讯飞在线语音合成API --内附完整项目
    科大讯飞语音开放平台基础环境搭建1.用户注册 注册科大讯飞开放平台账号2.注册好后先创建一个自己的应用创建完成后进入应用可以看到我们开发需要的三个参数:APPID,APISecret,APIKey3.因为平台提供的SDK中只支持了简单的中英两种语言语音合成,所以这里我们不会用提供的Jav......
  • 如何挑选一个合适的HIS系统? 基于B/S架构,JAVA语言,springboot最新技术栈开发的整套云HIS
    如何挑选一个合适的HIS系统?基于B/S架构,JAVA语言,springboot最新技术栈开发的整套云HIS系统源码HIS源码最近有很多人在询问,有没有最优秀的HIS系统?在这里小编是没办法回答的。为什么呢?因为要看你站在什么样的角度,如果是从医院的角度来说,那么我会建议你看看这篇文章,看看什么是......
  • EBU4201 Introductory Java Programming 2023/24Mini Project(⼉童练习乘法表 下个文
    Task1[25marks]SuperHeroTTisasimpleGraphicalUserInterface(GUI)applicationforchildrenwheretheycanpractisetheirtimestables(seeFigure1).Whenlaunched,yourappshouldlooklikeFigure1-FirstlaunchofSuperHeroTT.Thedrop-downbo......
  • JAVA面试中,面试官最爱问的问题。
     请用wait-notify写一段代码来解决生产者-消费者问题。生产者-消费者问题是一个经典的并发问题,它描述的是两类并发操作的问题:生产者将数据放入缓冲区,消费者从缓冲区取出数据。使用wait()和notify()方法可以在Java中实现这个问题的解决方案。以下是一个简单的示例,其中包含一......
  • JAVA面试中,面试官最爱问的问题。
    Java中的final关键字有什么作用?在Java中,final关键字具有多种用途,它可以被应用于类、方法和变量。以下是final关键字的具体作用:修饰变量:当final用于修饰一个变量时,意味着这个变量只能被赋值一次,即它是一个常量。对于基本数据类型,final使变量的值不可变;对于引用类型,final使......