java 網絡編程(五)Socket多線程上傳文件


客戶端:

package cn.sasa.socketUploadFileDemo;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class SocketClientDemo {

    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("127.0.0.1",8050);
        OutputStream output = socket.getOutputStream();
        
        FileInputStream inputFile = new FileInputStream("D:\\sasa\\Weixin.zip");
        byte[] buff = new byte[1024];
        int len = 0;
        while((len = inputFile.read(buff)) != -1) {
            output.write(buff,0,len);
        }
        //傳完后告訴服務器上傳完成,否則服務器會一直等待讀取
        socket.shutdownOutput();
        
        InputStream input = socket.getInputStream();
        len = input.read(buff);
        System.out.println(new String(buff,0,len));
        
        socket.close();
        inputFile.close();
    }
}

 

服務端:

package cn.sasa.socketUploadFileDemo;

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

public class ServerSocketDemo {

    public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(8050);
        //一直監聽
        while(true) {
            Socket clientSocket = server.accept();
            Thread th = new Thread(new UploadRunnable(clientSocket));
            th.start();
        }
    }

}

Runnable接口的實現類UploadRunnable.java,用於上傳文件

package cn.sasa.socketUploadFileDemo;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class UploadRunnable implements Runnable {

    private Socket clientSocket;
    public UploadRunnable(Socket socket) {
        this.clientSocket = socket;
    }
    @Override
    public void run() {
        try {
            InputStream input = clientSocket.getInputStream();
            File upload = new File("D:\\upload");
            if(!upload.exists()) {
                upload.mkdirs();
            }
            //文件命名
            String fileName = "sasa"+ System.currentTimeMillis()+".zip";
            FileOutputStream outputFile = new FileOutputStream(upload+File.separator+fileName);
            byte[] buff = new byte[1024];
            int len = 0;
            while((len = input.read(buff)) != -1) {
                outputFile.write(buff,0,len);
            }
            OutputStream output = clientSocket.getOutputStream();
            output.write("上傳完成".getBytes());
            outputFile.close();
            clientSocket.close();
        }catch(Exception ex) {
            ex.printStackTrace();
        }
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM