1. 程式人生 > 程式設計 >Java 基於tcp協議實現檔案上傳

Java 基於tcp協議實現檔案上傳

服務端

package lesson02;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 服務端接收檔案
 */
public class TcpServerDemo2 {

  public static void main(String[] args) throws IOException {
    //1、建立服務
    ServerSocket serverSocket = new ServerSocket(9000);
    //2、監聽客戶端的連線
    Socket socket = serverSocket.accept();//阻塞式監聽,會一直等待客戶端連線
    //3、獲取輸入流
    InputStream is = socket.getInputStream();

    //4、檔案輸出
    FileOutputStream fos = new FileOutputStream(new File("receive.jpg"));
    byte[] buffer = new byte[1024];
    int len;
    while ((len = is.read(buffer)) != -1){
      fos.write(buffer,len);
    }

    //通知客戶端我接收完畢了
    OutputStream os = socket.getOutputStream();
    os.write("我接收完畢了,你可以斷開了".getBytes());

    //5、關閉資源
    fos.close();
    is.close();
    socket.close();
    serverSocket.close();

  }

}

客戶端

package lesson02;

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;

/**
 * 客戶端上傳檔案
 */
public class TcpClientDemo2 {

  public static void main(String[] args) throws Exception {

    //1、建立一個Socket連線
    Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),90000);
    //2、建立一個輸出流
    OutputStream os = socket.getOutputStream();

    //3、讀取檔案
    FileInputStream fis = new FileInputStream(new File("toux.jpg"));
    //4、寫出檔案
    byte[] buffer = new byte[1024];
    int len;
    while ((len = fis.read(buffer)) != -1){
      os.write(buffer,len);
    }

    //通知伺服器,我已經結束了
    socket.shutdownOutput(); //我已經傳輸完了

    //確定伺服器接收完畢,才能夠斷開連線
    InputStream inputStream = socket.getInputStream();
    //Sting byte[]
    ByteArrayOutputStream baos = new ByteArrayOutputStream();

    byte[] buffer2 = new byte[1024];
    int len2;
    while ((len2 = inputStream.read(buffer2)) != -1){
      baos.write(buffer2,len2);
    }

    System.out.println(baos.toString());

    //5、關閉資源
    fis.close();
    os.close();
    socket.close();

  }

}

以上就是Java 基於tcp協議實現檔案上傳的詳細內容,更多關於Java 檔案上傳的資料請關注我們其它相關文章!