Dúvida com envio de arquivos via Socket

Eu fiz um código simples que envia um objeto para um cliente via socket.

public void iniciarServer(){
        try {
            server = new ServerSocket(porta);
            System.out.println("Servidor iniciado na porta "+porta);
            System.out.print("IP do servidor: "+Inet4Address.getLocalHost());
            System.out.println("");
            while(true){
                cliente = server.accept();
                System.out.println("Cliente conectado: "+cliente.getInetAddress().getHostName());
                output = new ObjectOutputStream(cliente.getOutputStream());
                output.flush();
                output.writeObject("Essa mensagem foi enviada pelo servidor");
                output.close();
                cliente.close();
            }
            
            
        } catch (IOException ex) {
            Logger.getLogger(Servidor.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

Eu até consegui enviar uns arquivos com um vetor de bytes, mas surgiu uma dúvida:
Caso eu queira enviar vários arquivos, o cliente precisaria saber quando o arquivo atual acaba e quando o novo começa. Ou então, o servidor precisaria saber quando o cliente termina de gravar o arquivo. Também sei que ao mesmo tempo que o arquivo é recebido, ele precisa já ir sendo gravado para a memória ram não limitar o tamanho máximo dele. Não faço ideia de como fazer isso, alguém sabe?

Você precisa determinar um protocolo para enviar seus arquivos.
Uma forma simples é a primeira informação enviada ser o tamanho do arquivo em bytes, aí, a medida que você vai lendo, você vai controlando os bytes recebidos.
Se for enviar mais de um arquivo, seu protocolo pode enviar primeiro a quantidade de arquivos, depois envia o tamanho do primeiro arquivo, seguido dos bytes do arquivo, quando o primeiro arquivo acaba, envia o tamanho do segundo arquivo, seguido dos bytes dele e assim sucessivamente.

2 curtidas

Vlw, vou tentar fazer isso, depois eu volto pra falar se consegui.