Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Problema Socket
Forum - Java - Problema Socket

Avatar
WARRIOR (Ex-Member)
Guru


Messaggi: 627
Iscritto: 30/03/2007

Segnala al moderatore
Postato alle 21:40
Mercoledì, 10/09/2008
Ragazzi sto portando avanti un progetto che prevende un client ed un server. Quest'ultimo darà la possibilità di scaricare dei file presenti in una directory.
Fin qui tutto bene. Il problema si presenta quando vado a far dialogare client e server. Ho constatato che il server funziona, provandolo con telnet. Ma allo sviluppo del client si sono presentati dei problemi. Infatti quando faccio dialogare i due programmi, inevitabilmente le socket del client sono chiuse, lanciando (da parte del server) una IOException.
E' una anomalia o sono io che dimentico qualche passaggio.
Creata la socket e la serversocket, provo il seguente passaggio.


Codice sorgente - presumibilmente C#

  1. String Request = "";
  2.                 String RequestType = "";
  3.                 String RequestFile = "";
  4.                 BufferedReader F =
  5.                                new BufferedReader(new InputStreamReader(client_process.getInputStream()));
  6.                 Request = F.readLine();
  7.                 //Analizzo la richiesta secondo il protocollo stabilito
  8.                 StringTokenizer cmd = new StringTokenizer(Request,"|");
  9.                 RequestType = cmd.nextToken();
  10.                     if(cmd.countTokens()>1) {
  11.                         RequestFile = cmd.nextToken();
  12.                     }
  13.                 if(RequestType.equals("download")) {
  14.                     download(RequestFile);
  15.                     F.close();
  16.                     client_process.close();
  17.                     client_list.remove(client_process);
  18.                 }
  19.                 else if(RequestType.equals("upload")) {
  20.                     upload(RequestFile);
  21.                     F.close();
  22.                     client_process.close();
  23.                     client_list.remove(client_process);
  24.                 }
  25.                 else {
  26.                     BufferedWriter fout = new BufferedWriter(
  27.                             new OutputStreamWriter(
  28.                                 client_process.getOutputStream()));
  29.                     File file = new File("Files/");
  30.                     String[] fs = file.list();
  31.                         for(int i=0; i<fs.length; i++) {
  32.                             fout.write(fs[i]+"\n");
  33.                         }
  34.                     fout.flush();
  35.                     fout.close();
  36.                     F.close();
  37.                     client_process.close();
  38.                     client_list.remove(client_process);
  39.                 }



questa è la parte del server che attende un comando del client. Inviando la stringa REFRESH per esempio, il server dovrebbe spedirmiuna lista di file attraverso lo stream FOUT. Tuttavia questo non avviene, perché la socket è chiusa...
Se provo a chiudere uno stream succede la stessa cosa, la socket si chiude.

Questa è la parte del client che riceve

Codice sorgente - presumibilmente Java

  1. try {
  2.                 connection = new Socket(ip.getText(),SERVER_PORT);
  3.                 BufferedWriter List_Request = new BufferedWriter(
  4.                         new OutputStreamWriter(connection.getOutputStream()));
  5.                
  6.                 String Request = "refresh";
  7.                 List_Request.write(Request);
  8.                 dbar.setIndeterminate(true);
  9.                 String RecevFile = "";
  10.                
  11.                 BufferedReader f = new BufferedReader(
  12.                         new InputStreamReader(connection.getInputStream()));
  13.                
  14.                 while((RecevFile = f.readLine())!=null) {
  15.                     System.out.println(RecevFile);
  16.                     files.addItem(RecevFile);
  17.                 }
  18.                
  19.                 f.close();
  20.                 List_Request.close();
  21.                 connection.close();
  22.                 dbar.setIndeterminate(false);
  23.                 JOptionPane m = new JOptionPane();
  24.                 m.showMessageDialog(null,"Lista dei file ricevuta.");
  25.             }
  26.             catch(IOException error_list) {
  27.                 dbar.setIndeterminate(false);
  28.                 JOptionPane m = new JOptionPane();
  29.                 m.showMessageDialog(null,"Impossibile raggiungere la destinazione."+error_list.getMessage());
  30.             }



Potete darmi una mano?

Grazie


Continuerò a correre, perchè ci sarà sempre qualcuno migliore di me.

Evvia i libri, evitate gli stolti che non li integrano nella loro vita.

http://www.mentisferiche.it

Luca Tedesco
PM Quote