(網絡編程)TCP實現文件上傳

TCP實現文件上傳

演示TCP如何實現從客戶端上傳文件到服務器,可以用兩臺電腦連同一個局域網,一個作爲客戶端一個作爲服務器實現,兩臺只要能Ping通就可以。這裏由於設備限制用同一臺電腦演示。
先放個圖片到項目中
在這裏插入圖片描述

客戶端代碼實現

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

public class Demo01Client {
    public static void main(String[] args) throws IOException {
        //1.創建一個socket連接
        Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),9000);
        //2.創建一個輸出流
        OutputStream os = socket.getOutputStream();
        //3.讀取文件
        FileInputStream fis = new FileInputStream("img.png");
        //4.寫出文件
        byte[] buffer = new byte[1024];
        int len;
        while ((len = fis.read(buffer))!=-1){
            os.write(buffer,0,len);
        }
        //5.通知服務器發送完畢
        socket.shutdownOutput();
        //6.確定服務端接收完畢才能斷開連接
        InputStream is = socket.getInputStream();
        //String byte[]
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer1 = new byte[1024];
        int len1;
        while ((len1=is.read(buffer1))!=-1){
            baos.write(buffer1,0,len1);
        }
        System.out.println(baos.toString());
        baos.close();
        is.close();
        fis.close();
        os.close();
        socket.close();
    }
}

服務器代碼實現

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Demo01Server {
    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("receive.png");
        byte[] buffer = new byte[1024];
        int len;
        while ((len=is.read(buffer))!=-1){
            fos.write(buffer,0,len);
        }
        //5.通知客戶端接收完畢
        OutputStream os = socket.getOutputStream();
        os.write("服務端已接收".getBytes());
        os.close();
        fos.close();
        is.close();
        socket.close();
    }
}

服務器接收到文件
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章