java 網路程式設計中 TCP 實現檔案上傳 **優化**
阿新 • • 發佈:2021-09-05
編寫程式碼
1,服務端接收檔案 TcpServerDemo02
package com.xiang.lesson02; import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.nio.charset.StandardCharsets; //服務端接收檔案 public class TcpServerDemo02 { public static void main(String[] args) throws Exception { // 1,建立一個埠 建立一個服務 ServerSocket socket = new ServerSocket(9000); // 2,監聽客戶端的連線 Socket accept = socket.accept(); // 3,獲取輸入流 InputStream is = accept.getInputStream(); // 4,檔案輸出 FileOutputStream fos = new FileOutputStream(new File("res")); byte[] buffer = new byte[1024]; int len; while ((len=is.read(buffer))!=-1){ fos.write(buffer,0,len); } // 通知客戶端 ,我接收完成 OutputStream os = accept.getOutputStream(); os.write("我這邊接收完畢了,你可以斷開了".getBytes(StandardCharsets.UTF_8)); // 關閉資源 fos.close(); is.close(); accept.close(); socket.close(); } }
2,客戶端讀取檔案 TcpClientDemo02
package com.xiang.lesson02; import java.io.*; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; //客戶端讀取檔案; public class TcpClientDemo02 { public static void main(String[] args) throws Exception { //1, 建立一個socket 連線 Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000); // 2,建立一個輸出注 OutputStream os = socket.getOutputStream(); // 3,檔案流 讀取檔案 FileInputStream fis = new FileInputStream(new File("javaee.txt")); // 4,寫出檔案 byte[] buffer = new byte[1024]; int len; while ((len = fis.read(buffer)) != -1) { os.write(buffer, 0, len); } // 通知伺服器,我已經結束 了 socket.shutdownOutput(); //我已傳輸完了 // 確定伺服器接收完畢,才斷開連線 InputStream inputStream = socket.getInputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer2 = new byte[1024]; int len2; while ((len2=inputStream.read(buffer2))!=-1){ baos.write(buffer2,0,len2); } System.out.println(baos.toString()); // 5,關閉資源 baos.close(); inputStream.close(); fis.close(); os.close(); socket.close(); } }