Upload, download, criação de pasta usando socket Java

Alguém poderia me ajudar no seguinte problema?

Já consegui fazer a conexão do upload do cliente para o servidor, mas estou tendo dificuldades quanto ao restante.

“O computador cliente deve estabelecer uma conexão TCP com um computador servidor,
para em seguida transmitir arquivos, cujas cópias de segurança serão armazenadas no
computador servidor.
O usuário deverá efetuar as seguintes operações: upload, download de arquivos, criação
e renomeação de pastas.”

Para o servidor tenho o codigo abaixo:
public class Server {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(5678);
Socket s = server.accept();
InputStream in = s.getInputStream();
InputStreamReader isr = new InputStreamReader(in);
BufferedReader reader = new BufferedReader(isr);
String fName = reader.readLine();
System.out.println(fName);
File f1 = new File(“C:/servidor/ArquivoEnviado” + fName);
FileOutputStream out = new FileOutputStream(f1);
int tamanho = 4096; // buffer de 4KB
byte[] buffer = new byte[tamanho];
int lidos = -1;
while ((lidos = in.read(buffer, 0, tamanho)) != -1) {
System.out.println(lidos);
out.write(buffer, 0, lidos);
}
out.flush();
} catch (IOException e) {
}

Para o cliente tenho o codigo abaixo:
public static void main(String[] args) throws Exception {
Scanner a = new Scanner(System.in);
System.out.println(“File:”);
String fName = a.nextLine();
File f = new File(“C:/cliente/” + fName);
FileInputStream in = new FileInputStream(f);
Socket socket = new Socket(“localhost”, 5678);
OutputStream out = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(out);
BufferedWriter writer = new BufferedWriter(osw);
writer.write(f.getName() + “\n”);
writer.flush();
int tamanho = 4096; // buffer de 4KB
byte[] buffer = new byte[tamanho];
int lidos = -1;
while ((lidos = in.read(buffer, 0, tamanho)) != -1) {
out.write(buffer, 0, lidos);
}
}