檔案上傳程序一個單向Socket通信程序,客戶端通過檔案輸入流讀取檔案,然后從Socket獲取輸出流寫入資料,服務端從Socket中獲得輸入流,然后寫入檔案輸出流,寫入資料完成則上傳完成,
服務端UploadServer:
public class UplaodServer {
public static void main(String []args){
try(
// 創建一個ServerSocket監聽8080埠的請求
// ServerSocket 實作了 AutoCloseable介面, 可以自動釋放資源
ServerSocket server = new ServerSocket(8080);
// accept()會阻塞當前執行緒, 等待客戶端請求
Socket socket = server.accept();
// 獲取輸入流
BufferedInputStream in = new BufferedInputStream(socket.getInputStream());
// 由檔案輸出流創建緩沖輸出流, 寫入本地upload.jpg 檔案
FileOutputStream outputStream = new FileOutputStream("./upload.jpg")
){
// 緩沖區
byte [] buffer = new byte[1024];
int len = in.read(buffer);
while(len != -1){
// 寫入資料到檔案
outputStream.write(buffer, 0, len);
// 再次從Socket中讀取資料
len = in.read(buffer);
}
System.out.println("檔案已上傳");
}catch (IOException e) {
e.printStackTrace();
}
}
}
客戶端UploadClient:
public class UploadClient {
public static void main(String []args){
try(
// Socket 實作了 AutoCloseable介面 可自動關閉資源
Socket socket = new Socket("127.0.0.1", 8080);
// 又Socket獲得輸出流, 并創建緩沖輸出流
BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream());
FileInputStream fileInput = new FileInputStream("F:\file\oxx6j5.jpg");
// 由檔案輸入流創建緩沖輸入流
BufferedInputStream in = new BufferedInputStream(fileInputStream);
){
// 準備緩沖區
byte[] buffer = new byte[1024];
int len = in.read(buffer);
while (len != -1) {
// 寫入Socket
out.write(buffer, 0, len);
// 再次讀取檔案
len = in.read(buffer);
}
System.out.println("上傳成功!");
}catch (ConnectException e) {
System.out.println("服務器未啟動");
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
注意
server.accept()會阻塞執行緒,所以最好把server.accept()陳述句放入子執行緒中,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/232920.html
標籤:其他
上一篇:圖的代碼實作(鄰接矩陣)
下一篇:visualVM進行jvm監控
