"Google Drive" utilizando UDP

Bom dia, preciso montar uma espécie de “Google Drive” utilizando UDP, ou seja, uma aplicação P2P com funções de servidor e cliente para a transferência de arquivos entre peers. Como vai ser um teste local não preciso me preocupar com a autenticação e descoberta automática de peers, pois vou usar uma lista com os IPs dos computadores que irei me conectar. Já definimos um protocolo de comunicação, contudo não estou conseguindo fazer a transferência de arquivos .txt de volta para o cliente e as outras funcionalidades do Drive.

Até o momento monteis as seguintes classes:
Cliente:

import java.io.*;
import java.net.*;
import java.util.Arrays;
import java.util.Scanner;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
 
class Cliente {
    public static void main(String args[]) throws Exception {
        int count = 0;
        int tamanho = 1048;
        DatagramSocket clientSocket = new DatagramSocket();
        String servidor = "localhost";
        int porta = 9876;
        InetAddress IPAddress = InetAddress.getByName(servidor);
        byte[] sendData = new byte[tamanho];
                
        Scanner scan = new Scanner(System.in);
        int opcao = -1;
        while (opcao != 3) {
            menu();
            opcao = scan.nextInt();
            switch (opcao){
                case 1:
                    String sentense = "" + opcao;
                    sendData = sentense.getBytes();
                    DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
                    clientSocket.send(sendPacket);
                    System.out.println("Enviou opçao 1..");
                    File file = selectFile();
                    String nomeArquivo = file.getName();
                    System.out.println("Nome do arquivo " + nomeArquivo);
                    sentense = file.getName();
                    System.out.println("sentence " + sentense);
                    sendData = sentense.getBytes();
                    System.out.println("SendData " + sendData);
                    sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
                    System.out.println("SendPacket " + sendPacket);
                    clientSocket.send(sendPacket);
                    System.out.println("Enviou o nome..");
                    FileInputStream input = new FileInputStream(file);
                    int tamanhoArquivo = 0; 

                    while((count = input.read(sendData)) != -1){
                        tamanhoArquivo += count;
                    }
                    int numeroPacotes = tamanhoArquivo/tamanho;
                    System.out.println("numeroPacotes " + numeroPacotes);
                    input.close();
                    System.out.println("---------- Mandando arquivo -----------");
                    FileInputStream input2 = new FileInputStream(file);
                    while((count = input2.read(sendData)) != -1 ){ 
                        System.out.println(new String(sendData));
                        sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
                        System.out.println("sendData: " + sendData + " sendData.length: "  + sendData.length + " IPAddress "  + IPAddress);
                        System.out.println("sendPacket do while " + sendPacket);
                        clientSocket.send(sendPacket);
                        System.out.println("Enviando arquivo para o servidor..");
                    }
                    break;
                case 2:
                    break;
            }
        }
    }
        
    public static File selectFile() throws FileNotFoundException {
        JFileChooser fileChooser = new JFileChooser("C:/Users/Pasta");

        int result = fileChooser.showOpenDialog(null);
        if (result == JFileChooser.APPROVE_OPTION) {
            String filename = fileChooser.getSelectedFile().getPath();
            System.out.println(filename);
            File file = new File(filename);
            // Get the size of the file
            return file;
        } else if (result == JFileChooser.CANCEL_OPTION) {
            JOptionPane.showMessageDialog(null, "Nenhum arquivo foi selecionado!");
        } else if (result == JFileChooser.ERROR_OPTION) {
            JOptionPane.showMessageDialog(null, "Erro ao selecionar o arquivo!");
        }
        return null;
    }
        
    private static void menu() {
        System.out.println("1- Enviar Arquivo para o Servidor");
        System.out.println("2- Baixar arquivo do Servidor");
        System.out.println("3- Sair");
    }
}

Servidor:

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.util.ArrayList;

class Servidor {

    public static void main(String args[]) throws IOException {
        DatagramSocket serverSocket = new DatagramSocket(9876);
        byte[] recData = new byte[1024 * 16];
        int i = 0;
        ArrayList<File> arquivos = new ArrayList<File>();
        while (true) {
            System.out.println("Servidor está esperando");
            DatagramPacket recPacket = new DatagramPacket(recData, recData.length);
            System.out.println("recPacket criado com DatagramPacket -> " + recPacket);
            serverSocket.receive(recPacket);
            System.out.println("recPacket recebido -> " + recPacket);
            String opcao = new String(recData);
            opcao = opcao.substring(0, 1);
            if ("1".equals(opcao)) {
                System.out.println("Recebeu opção 1..");
                recPacket = new DatagramPacket(recData, recData.length);
                serverSocket.receive(recPacket);
                String nomeArquivo = (new String(recData));
                System.out.println("Recebeu o nome.." + nomeArquivo);
                FileWriter file = new FileWriter("C:/Users/Pasta/teste.txt");
                PrintWriter out = new PrintWriter(file);
                recPacket = new DatagramPacket(recData, recData.length);
                System.out.println("recPacket depois do PrinWriter -> " + recPacket);
                serverSocket.receive(recPacket);
                System.out.println("Enviou o arquivo..");
                out.write(new String(recData), 0, recPacket.getLength());
                System.out.println("\nPacket" + ++i + " written to file\n");
                out.flush();
            } else {
                System.out.println("else");
            }
        }
    }
}

No momento o cliente pede pro servidor, o servidor envia de volta, só que o cliente não está recebendo o arquivo, como eu faço para ele receber o arquivo e fazer as validações?

Obrigado.