Basic knowledge of Java threads execute in parallel as much as upload pictures operation

A first look at the client:

public class uploadpicThreadClient {
    public static void main(String[] args) throws IOException {
        //1、创建客户端socket
        Socket socket = new Socket("127.0.0.1", 8080);

        //2、读取客户端要上传的图片
        FileInputStream fis = new FileInputStream("E:\\5.JPG");

        //3、获取socket输出流,将读到的图片数据发给服务端
        OutputStream outputStream = socket.getOutputStream();
        byte[] buf = new byte[1024];

        int len = 0;
        //使用输出流写出图片数据
        while ((len = fis.read(buf)) != -1) {
            outputStream.write(buf, 0, len);
        }

        // 告诉服务端,客户端数据已发送完毕,服务端停止读取
        socket.shutdownOutput();

        //读取服务端返回的数据
        InputStream inputStream = socket.getInputStream();
        //缓冲区存放数据提高读写速度
        byte[] bufIn = new byte[1024];

        int lenIn = inputStream.read(buf);
        String text = new String(buf, 0, lenIn);
        System.out.println(text);

        //关闭资源
        fis.close();
        socket.close();
    }
}

Server:
the server must have been in a standby state, when there is demand upload pictures, to accept the demand.

public class uploadpicThreadServer {
    public static void main(String[] args) throws IOException {
        //创建TCP的socket服务端
        ServerSocket ss =new ServerSocket(8080);
        while (true){
            //获取客户端
            //阻塞式方法,有任务时就开启,否则一直处于等待状态
            Socket socket = ss.accept();
            new Thread(new UploadTask(socket)).start();
        }
    }
}

Threaded task:
to obtain an IP connection processing picture data sent from and so on, these are the tasks each thread needs to perform, so the need to put the thread run () method of execution.

public class UploadTask implements Runnable {
    //规定上传文件的最大大小
    private static final int SIZE = 1024*1024*2;
    private Socket socket;

    public UploadTask(Socket socket) {
        this.socket=socket;
    }
    @Override
    public void run() {
        int count=0;
        String ip = socket.getInetAddress().getHostAddress();
        System.out.println(ip+".........connected");
        try {
            //读取客户端发来的数据
            InputStream inputStream = socket.getInputStream();

            //将读取到的文件存储到一个文件中
            File dir =new File("E:\\image");
            if (!dir.exists()){
                dir.mkdirs();
            }
            File file =new File(dir,ip+".jpg");
            //如果文件已经存在服务端,就文件名IP在原来的基础上+1
            while (file.exists()){
                file = new File(dir,ip+"("+(++count)+").jpg");
            }
            FileOutputStream fos =new FileOutputStream(file);

            byte[] buf=new byte[1024];

            int len=0;
            while ((len=inputStream.read(buf))!=-1){

                fos.write(buf,0,len);
                if (file.length()>SIZE){
                    System.out.println(ip+"文件体积过大");
                    fos.close();
                    socket.close();

                    System.out.println(ip+"....."+file.delete());
                    return;
                }
            }
            //获取socket输出流,将上传成功字样发给服务端
            OutputStream outputStream = socket.getOutputStream();
            outputStream.write("上传成功".getBytes());
            fos.close();
            socket.close();
        }catch (IOException e){
        }
    }
}

test

First, start the server uploadpicThreadServe
restart the client uploadpicThreadClient

Published 99 original articles · won praise 2 · Views 2618

Guess you like

Origin blog.csdn.net/weixin_41588751/article/details/105211466