JAVA单排日记-2020/1/30-网络编程_综合案例—文件上传(C/S结构)

在这里插入图片描述
在这里插入图片描述

问题阻塞

在这里插入图片描述

优化:

    ◆ 文件名不重复,防止被覆盖

  • 命名规则:域名+毫秒值+随机数+后缀
String fileName ="copy"+System.currentTimeMillis()+new Random().nextInt(999999)+".jpg";

    ◆ 服务器一直处于监听状态(死循环)

  • 加上死循环,去掉close()

    ◆ 使用多线程,提高服务端效率,可以接受多个客户同时上传

客户端:

package File_Upload;

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

public class Client01 {
    public static void main(String[] args) throws IOException {
        Socket client01 = new Socket("127.0.0.1",6666);

        FileInputStream file = new FileInputStream("G:\\Java\\测试文件夹\\copy.jpg");

        InputStream fileIn = client01.getInputStream();
        OutputStream fileOut = client01.getOutputStream();

        int fileLen=0;
        byte[] fileBytes = new byte[1024];
        while ((fileLen=file.read(fileBytes))!=-1){
            fileOut.write(fileBytes);
        }
        client01.shutdownOutput();

        int severLen =0;
        byte[] severBytes = new byte[1024];
        while ((severLen=fileIn.read(severBytes))!=-1){
            System.out.println(new String(severBytes,0,severLen));
        }

        file.close();
        client01.close();
    }
}

服务器

package File_Upload;

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

public class Sever {
    public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(6666);
        while (true) { //让服务器一直处于监听状态
            Socket client = server.accept();

            new Thread(){ //使用多线程,让多个客户端可以同时上传
                @Override
                public void run() {//使用多线程,让多个客户端可以同时上传
                    try {
                        InputStream In = client.getInputStream();
                        OutputStream Out = client.getOutputStream();

                        String fileName = "copy" + System.currentTimeMillis() + new Random().nextInt(999999) + ".jpg";
                        FileOutputStream fileOut = new FileOutputStream("G:\\Java\\测试文件夹\\新建文件夹\\" + fileName);

                        int Len = 0;
                        byte[] bytes = new byte[1024];
                        while ((Len = In.read(bytes)) != -1) {
                            fileOut.write(bytes);
                            fileOut.flush();
                        }

                        Out.write("文件已经收到".getBytes());

                        fileOut.close();
                        client.close();
                        // server.close(); 让服务器一直处于监听状态
                    }catch (IOException e){
                        e.toString();
                    }
                }
            }.start();
            
        }
    }
}

在这里插入图片描述
在这里插入图片描述

发布了131 篇原创文章 · 获赞 1 · 访问量 4455

猜你喜欢

转载自blog.csdn.net/wangzilong1995/article/details/104115304
今日推荐