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); } } }

Rispondi quotando