使用TCP協議,分別編寫服務端和客戶端,要求客戶端向服務端上傳檔案。(使用字元流完成)
阿新 • • 發佈:2018-11-28
package Test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.Socket; /** * 5.使用TCP協議,分別編寫服務端和客戶端,要求客戶端向服務端上傳檔案。 * @author Administrator */ public class Test05 { //客戶端 public static void main(String[] args) throws IOException { //建立客戶端端點物件,並確定服務端的ip及埠號; Socket s = new Socket("localhost",8970); //獲取通道輸出流物件,給服務端傳送資料。 OutputStream ost = s.getOutputStream(); //將位元組輸出流轉換成字元輸出流 OutputStreamWriter ops = new OutputStreamWriter(ost); //利用字元緩衝流提高效率 BufferedWriter bfw = new BufferedWriter(ops); //建立字元輸入流 FileReader fr = new FileReader("d:\\1.txt"); //讀取本地磁碟的檔案 char [] by = new char [1024]; int len = 0 ; while((len = fr.read(by)) != -1) { bfw.write(by, 0, len); bfw.newLine(); bfw.flush(); } fr.close(); //告訴服務端資料已傳送完成 System.out.println("資料已傳送完畢"); s.shutdownOutput(); //獲取服務端反饋的資料 BufferedReader bfd = new BufferedReader(new InputStreamReader(s.getInputStream())); String line = bfd.readLine(); System.out.println(line); //關閉客戶端 s.close(); } }
package Test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; /** * 使用TCP協議,分別編寫服務端和客戶端,要求客戶端向服務端上傳檔案。 * @author Administrator */ public class Test06 { /** * 服務端 * @param args * @throws IOException */ public static void main(String[] args) throws IOException { //建立服務端端點物件,並自定義埠號。 ServerSocket ss = new ServerSocket(8970); //接收客戶端 Socket s = ss.accept(); //獲取ip String ip = s.getInetAddress().getHostAddress(); //獲取輸入流,讀取客戶端給服務端傳送的資料 BufferedReader bfr = new BufferedReader(new InputStreamReader(s.getInputStream())); //建立輸出流物件,將資料寫入到本地磁碟 BufferedWriter bfd = new BufferedWriter(new FileWriter("d:\\"+ip+".txt")); String line = null; while((line = bfr.readLine()) != null) { bfd.write(line); bfd.newLine(); bfd.flush(); } System.out.println("檔案儲存成功"); bfd.close(); //給客戶端傳送資料 BufferedWriter bfd2 = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); bfd2.write("檔案上傳成功"); bfd2.flush(); s.close(); } }
服務端還可以新增執行緒,實現多個客戶端同時向服務端傳遞資料