實驗六 Java流式編程與網絡程序設計 頭歌
制作不易!點個關注!給大家帶來更多價值!
第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();//data[i]=1+(int)(Math.random()*100);}// 將數組元素按有小到大順序排列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();fout.close();// 創建FileInputStream和DataInputStream 輸入流FileInputStream f=new FileInputStream(file);DataInputStream d=new DataInputStream(f);// 利用輸入流從文件讀取數據并輸出for(int i=0;i<data.length;i++){System.out.print(d.readInt());if(i<data.length-1){System.out.print("<");}}// 關閉輸入流d.close();f.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 fw =new FileWriter(file);fw.write(a,0,a.length);fw.close();/********** End **********/// 利用字符輸入流FileReader讀取文件,將密文輸出/********** Begin **********/FileReader fr=new FileReader(file);char[] arr=new char[a.length];fr.read(arr);System.out.println("密文:");System.out.println(arr);/********** End **********/// 利用字符輸入流FileReader讀取文件,將密文轉換為明文輸出 /********** Begin **********/for(int i=0 ;i<a.length;i++){arr[i]=(char)(arr[i]^'q');}System.out.println("明文:");System.out.println(arr);/********** End **********/ }
}
第3關 簡單TCP通信
Client.java
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", 8080);/********** 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();}
}
Server.java
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(8080);/********** 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通信實現奇偶數判斷
ClientPlus.java
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", 8080);/********** 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();}}
}
ServerPlus.java
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(8080);/********** 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();}}
}
ReceiveThread.java
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("數據讀取異常");} }
}