Java-多線程上傳圖片


 

 1、TCP客戶端,用於調用圖片進行上傳服務器

package cn.bruce.TCPupload;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
/*實現TCP客戶端,連接到服務器,實現圖片上傳
 * 1、Socket套接字連接服務器
 * 2、通過Socket獲取字節輸出流,寫圖片
 * 3、使用自己的流對象,讀取圖片fileinputstream
 * 4、使用字節數組進行緩沖,使用輸出流,將圖片輸出到服務器
 * 5、通過Socket套接字獲取字節輸入流,打印服務器傳回的上傳成功、
 * 6、關閉資源
 */
public class TCPCLIENT {
    public static void main(String[] args) throws IOException, IOException {
        // 創建socket,連接服務器
        Socket s = new Socket("127.0.0.1", 8888);
        // 通過客戶端的套接字對象Socket方法,獲取字節輸出流,將數據寫向服務器
        OutputStream out = s.getOutputStream();
        // 讀取圖片
        FileInputStream fis = new FileInputStream("D:\\r.jpg");
        // 服務服務器發回的數據
        InputStream in = s.getInputStream();
        int len = 0;
        byte[] data = new byte[1024];
        while ((len = fis.read(data)) != -1)
        {
            out.write(data, 0, len);
        }
        s.shutdownOutput();//給服務器寫終止序列(很重要!)
        System.out.println(new String(data, 0, in.read(data)));
        s.close();
        fis.close();
    }
}

2、TCPsevers服務器端 用於接收客戶端傳來的數據(實際是接收客戶端套接字對象)

package cn.bruce.TCPupload;

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

public class TCPSEVERS {
    public static void main(String[] args) throws IOException {
        // 創建服務器對象
        ServerSocket ss = new ServerSocket(8888);
        while (true)
        {
            // 調用accept()方法,獲取客戶端套接字對象
            Socket s = ss.accept();
            //獲取到一個客戶端,必須開啟新線程
            new Thread(new Threadrun(s)).start();
        }
    }
}

3、線程代碼實現  傳入socket對象  對進行收到的數據進行接收處理

package cn.bruce.TCPupload;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Random;
import java.util.Scanner;

public class Threadrun implements Runnable {
    private Socket s;

    public Threadrun(Socket socket)
    {
        s = socket;
    }

    @Override
    public void run() {
        try
        {
            // 通過套接字對象,socket獲取字節
            InputStream in = s.getInputStream();
            // 服務器向客戶端回數據,字節輸出流,通過客戶端套接字對象獲取字節輸出流
            OutputStream out = s.getOutputStream();
            byte[] data = new byte[1024];
            File file = new File("D:\\test");
            if (!file.exists())
            {
                file.mkdirs();
            }
            //命名規則
            String s1 = System.currentTimeMillis() + new Random().nextInt(999)+".jpg";
            // 創建字節輸出流,將圖片寫到文件夾里
            FileOutputStream fos = new FileOutputStream(file + "\\" + s1);
            int len = 0;
            if ((len = in.read(data)) != -1)
            {
                fos.write(data, 0, len);
            }
            s.getOutputStream().write("上傳成功!".getBytes());//給客戶端反饋信息
            fos.close();
            s.close();
        } catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

 


免責聲明!

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



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