Salve ragazzi,
ho un piccolo problema di comunicazione client-server.
Mi sapreste dire dove è il problema??

Server
codice:
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketTimeoutException;

public class PutFileServerSeq {
    // porta al di fuori del range 1-1024!
    // dichiarata come statica perche' caratterizza il server

    public static final int PORT = 54321;

    /**
     * Main invocabile con 0 o 1 argomenti. Argomento possibile -> porta su cui
     * il server ascolta.
     *
     */
    public static void main(String[] args) throws IOException {
        // Porta sulla quale ascolta il server
        int port = -1;
        Gui.Inizialize();
        /*
         * controllo argomenti
         */
        try {
            if (args.length == 1) {
                port = Integer.parseInt(args[0]);
                // controllo che la porta sia nel range consentito 1024-65535
                if (port < 1024 || port > 65535) {
                    System.out.println("Usage: java LineServer [serverPort>1024]");
                    System.exit(1);
                }
            } else if (args.length == 0) {
                port = PORT;
            } else {
                System.out.println("Usage: java PutFileServerSeq or java PutFileServerSeq port");
                System.exit(1);
            }
        } //try
        catch (Exception e) {
            System.out.println("Problemi, i seguenti: ");
            System.out.println("Usage: java PutFileServerSeq or java PutFileServerSeq port");
            System.exit(1);
        }

        /*
         * preparazione socket e in/out stream
         */
        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(port, 2);
            serverSocket.setReuseAddress(true);
            System.out.println("PutFileServerSeq: avviato ");
            System.out.println("Creata la server socket: " + serverSocket);
        } catch (Exception e) {
            System.err.println("Problemi nella creazione della server socket: "
                    + e.getMessage());
            System.exit(2);
        }
        try {
            while (true) {
                Socket clientSocket = null;
                DataInputStream inSock = null;
                DataOutputStream outSock = null;

                System.out.println("\nIn attesa di richieste...");
                try {
                    // bloccante finche' non avviene una connessione
                    clientSocket = serverSocket.accept();
                    // visto che il server e' sequenziale se si bloccasse indefinitamente
                    // sull'unica socket da cui fornisce il servizio, il servizio sarebbe
                    // ospeso, quindi e' meglio mettere un timeout scaduto il quale
                    // tornare
                    // in attesa di richieste
                    clientSocket.setSoTimeout(30000);
                    System.out.println("Connessione accettata: " + clientSocket + "\n");
                } catch (SocketTimeoutException te) {
                    System.err.println("Non ho ricevuto nulla dal client per 30 sec., interrompo "
                            + "la comunicazione e accetto nuove richieste.");
                    // il server continua a fornire il servizio ricominciando dall'inizio
                    continue;
                } catch (Exception e) {
                    System.err.println("Problemi nella accettazione della connessione: "
                            + e.getMessage());
                    // il server continua a fornire il servizio ricominciando dall'inizio
                    // del ciclo, se ci sono stati problemi
                    continue;
                }
                try {
                    // creazione stream di input e out da socket
                    inSock = new DataInputStream(clientSocket.getInputStream());
                    outSock = new DataOutputStream(clientSocket.getOutputStream());
                } catch (IOException e) {
                    System.out.println("Problemi nella creazione degli stream di input/output "
                            + "su socket: ");
                    // il server continua l'esecuzione riprendendo dall'inizio del ciclo
                    continue;
                }
                /*
                 * ricezione file
                 */
                String nomeFile;
                // ricezione del nome
                try {
                    nomeFile = inSock.readUTF();
                } catch (SocketTimeoutException ste) {
                    System.out.println("Timeout scattato: ");
                    clientSocket.close();
                    System.out.print("\n^D(Unix)/^Z(Win)+invio per uscire, solo invio per continuare: ");
                    // il client continua l'esecuzione riprendendo dall'inizio del ciclo
                    continue;
                } catch (Exception e) {
                    System.out.println("Problemi nella ricezione del nome del file: ");
                    // servo nuove richieste
                    continue;
                }
                FileOutputStream outFile = null;
                String esito;
                if (nomeFile == null) {
                    System.out.println("Problemi nella ricezione del nome del file: ");
                    continue;
                } else {
                    // controllo se il file esiste, se non esiste lo creo, altrimenti
                    // torno errore
                    File curFile = new File("C:\\pippo.txt");
                    if (curFile.exists()) {
                        try {
                            esito = "Sovrascritto file esistente";
                            // distruggo il file da sovrascrivere
                            curFile.delete();
                        } catch (Exception e) {
                            System.out.println("Problemi nella notifica di file esistente: ");
                            // servo nuove richieste
                            continue;
                        }
                    } else {
                        esito = "Creato nuovo file";
                    }
                    outFile = new FileOutputStream("C:\\pippo.txt");
                }
                //ciclo di ricezione dal client, salvataggio file e stamapa a video
                try {
                    System.out.println("Ricevo il file " + nomeFile + ": \n");
                    FileUtility.trasferisci_a_byte_file_binario(inSock,
                            new DataOutputStream(outFile));
                    System.out.println("\nRicezione del file " + nomeFile
                            + " terminata\n");
                    // chiusura file
                    outFile.close();
                    // chiusura socket in downstream
                    clientSocket.shutdownInput();
                    // ritorno esito positivo al client
                    outSock.writeUTF(esito + ", file salvato lato server");
                    // System.out.println("\nTerminata connessione con "+clientSocket);
                    // chiudo la socket anche in upstream
                    clientSocket.shutdownOutput();
                    System.out.println("\nTerminata connessione con " + clientSocket);
                } catch (SocketTimeoutException ste) {
                    System.out.println("Timeout scattato: ");
                    clientSocket.close();
                    System.out.print("\n^D(Unix)/^Z(Win)+invio per uscire, solo invio per continuare: ");
                    // il client continua l'esecuzione riprendendo dall'inizio del ciclo
                    continue;
                } catch (Exception e) {
                    System.err.println("\nProblemi durante la ricezione e scrittura del file: "
                            + e.getMessage());
                    clientSocket.close();
                    System.out.println("Terminata connessione con " + clientSocket);
                    continue;
                    // il server continua a fornire il servizio ricominciando
                    // dall'inizio del ciclo esterno
                }
            }
        } // qui catturo le eccezioni non catturate all'interno del while
        // in seguito alle quali il server termina l'esecuzione
        catch (Exception e) {
            // chiusura di stream e socket
            System.out.println("Errore irreversibile, PutFileServerSeq: termino...");
            System.exit(3);
        }
    }
}