[java網絡編程練手實驗]通過Socket互相傳送圖片

任務要求:

客戶端往服務器端發送一個文件(可以是圖片或者word任意)
服務器端接收這個文件.(測試是否能夠正常打開)
(可以倆倆測試 內網環境)
要發送的文件寫死,比如 d:/hs.gif

先畫張圖理解下任務要求

在這裏插入圖片描述

其他的不多說,上代碼:

Client.java

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

/**
 * @author Bmo
 * @date 2019/8/8 19:09
 */
public class Client {
    private static final String PENDING_TRANSMISSION_FILE = "E:" + File.separator + "A.jpg";
    public static void main(String[] args) {
        try(Socket socket = new Socket("127.0.0.1", 9527)) {
            System.out.println("客戶端已連接");
            BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
            transmissionFile(bos, new File(PENDING_TRANSMISSION_FILE));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void transmissionFile(BufferedOutputStream bos, File file) throws IOException {
        byte[] datas = new byte[1024 * 8];
        FileInputStream fis = new FileInputStream(file);
        int len = 0;
        while ((len = fis.read(datas)) != -1) {
            System.out.println("文件讀取中");
            bos.write(datas, 0, len);
        }
        bos.close();
        System.out.println("文件已發送至服務器!");
    }

}

Server.java

package homework;

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

/**
 * @author Bmo
 * @date 2019/8/8 19:09
 */
public class Server {
    private final static String TARGETFILE_LOCATION = "D:" + File.separator + "javahomework" + File.separator + "b.jpg";
    public static void main(String[] args) {
        try(ServerSocket server = new ServerSocket(9527)) {
            System.out.println("服務啓動完畢,正在等待連接···");
            try(Socket socket = server.accept()) {
                System.out.println("連接成功,傳遞文件中···");
                while (true) {
                    BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
                    readAndWriteBytes(bis, new File(TARGETFILE_LOCATION));
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
    public static void readAndWriteBytes(BufferedInputStream bis, File targertFile) throws IOException{
        if (!targertFile.exists()) targertFile.createNewFile();
        FileOutputStream fos = new FileOutputStream(targertFile, true);
        byte[] datas = new byte[1024 * 8];
        int len = 0;
        while ((len = bis.read(datas)) != -1) {
            fos.write(datas, 0, len);
        }
        fos.close();
        System.out.println("文件傳輸完成!");
    }
}

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