多种方式完成的服务器上传案例

/*
    使用多线程完成服务器端。

 */
public class Demo03UploadServerLoad {
    public static void main(String[] args) throws IOException {
        //1创建serversocker对象,
        ServerSocket serverSocket=new ServerSocket(9900);
        //调用accept,监听或获取客户端socket
        while(true) {
        Socket socket = serverSocket.accept();

            //如果监听到了客户端的请求,就开启一个新的线程给这个请求执行上传任务
            //创建线程任务对象
          Task t=new Task(socket);
          Thread p=new Thread(t);
          p.start();

        }
    }
}
*
    上传案例Lambda表达式版本
 */
public class Demo04UploadServer {
    public static void main(String[] args) throws IOException {
//        method();//匿名内部类
        method2();//lambada表达式

    }
    @SuppressWarnings("all")
    public static void method2() throws IOException {
        // 创建服务器对象
        ServerSocket serverSocket = new ServerSocket(9900);
        //创建FieloutputThream 对象,将读取到的存储到本地
        FileOutputStream fos = new FileOutputStream("E:\\就业班代码\\day11\\src\\cn\\itcast\\demo02_upload\\aa.jpg");
        //调用accept方法,获取客户端 socket
        Socket socket = serverSocket.accept();
        new Thread(() -> {
            try {
                while (true) {
                    InputStream in = socket.getInputStream();
                    //           每次读取一个字节数组,创建字节数组
                    byte bArr[] = new byte[1024];
                    int len;
                    while ((len = in.read(bArr)) != -1) {
                        //len 返回字节数组的长度,读了一个字符数组的长度,写入一个字符数组长度、
                        fos.write(bArr, 0, len);
                    }
                    //给客户端回消息
                    OutputStream out = socket.getOutputStream();
                    out.write("上传完成了".getBytes());

                    //           关闭流
                    socket.close();
                    fos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }


        }).start();

    }



    public static void method() throws IOException {
        //创建服务器对象
        ServerSocket serverSocket = new ServerSocket(9900);
        //创建FieloutputThream 对象,将读取到的存储到本地
        FileOutputStream fos = new FileOutputStream("E:\\就业班代码\\day11\\src\\cn\\itcast\\demo02_upload\\aa.jpg");
        //调用accept方法,获取客户端 socket
        Socket socket = serverSocket.accept();
        //接收客户端信息
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    while (true) {
                        InputStream in = socket.getInputStream();
                        //           每次读取一个字节数组,创建字节数组
                        byte bArr[] = new byte[1024];
                        int len;
                        while ((len = in.read(bArr)) != -1) {
                            //len 返回字节数组的长度,读了一个字符数组的长度,写入一个字符数组长度、
                            fos.write(bArr, 0, len);
                        }
                        //给客户端回消息
                        OutputStream out = socket.getOutputStream();
                        out.write("上传完成了".getBytes());

                        //           关闭流
                        socket.close();
                        fos.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }


            }
        }).start();
    }
}
public class Task implements Runnable {
    private Socket socket;

    public Task() {
    }

    public Task(Socket socket) {
        this.socket = socket;
    }

  
  @Override
    public void run() {
        try {
            InputStream in = socket.getInputStream();
            // 4. 创建FileOutputStream用来向自己电脑(服务器端)写数据
            FileOutputStream fos = new FileOutputStream("F:\\wo.jpg");
            //5. 开始读写,一次读写一个字节数组,每读取一个字节数组,就把读取到的字节数组写到本地。
//        FileOutputStream fos = new FileOutputStream("d:\\server\\" + UUID.randomUUID().toString() + ".jpg");
            byte[] bArr = new byte[1024];
            int len;
            while ((len = in.read(bArr)) != -1) {
                fos.write(bArr, 0, len);
            }
            fos.close();
            //6. 调用Socket对象的getOutputStream得到输出流,用来向客户度写数据
            OutputStream out = socket.getOutputStream();
            out.write("上传成功".getBytes());

            //释放资源
            fos.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

猜你喜欢

转载自blog.csdn.net/qq_28761767/article/details/81169344