Newsgroup: it.comp.java
Titolo: URGENTE: socket e stream

Ciao a tutti,
ho un'errore in una semplice architettura client-server con socket, ma
non riesco proprio a venirne fuori, anche perche' si blocca tutto senza
dare informazioni.
 - client e server comunicano attraverso un socket 
 - per entrambi:   
			    in = new BufferedReader(....
			    out = new PrintWriter(....
 - il client manda due stringhe al server.
 - il server le legge e apre un file di testo, che poi legge riga per
riga e che spedisce infine tutto al client, che se lo ricostruisce e lo
visualizza all'utente per modifiche.
fin qui tutto bene, ma quando il client, dopo un po' di tempo deve andare
a spedire indietro al server le modifiche, allora non funziona piu'.
Questo succede a causa di una readLine eseguita dal server (dopo che ha
spedito tutta la roba al client), che dovrebbe leggere le modifiche, ma
che presumo sia non bloccante e che non blocca il thread creato dal
server per gestire il socket.
Questa e' la run del thread del server:
//-----------------------------------------------------------
  public void run() {
    boolean completedLoad = false;
    try {
      String portfolioID = in.readLine();
      String password = in.readLine();
      boolean pass = verifyPassword(portfolioID, password);
      if (pass) {
	String stringPortfolio = new String();
        try {
          String pathFile = portfolioID + 
	                    System.getProperty("file.separator") +
                            "portfolio.xml";
	  // legge il portfolio nella stringa stringPortfolio
	  BufferedReader fromFile = new BufferedReader( new
FileReader(pathFile));
	  String s = new String();
	  while ((s=fromFile.readLine())!=null)
	      stringPortfolio += s + "\n";
	  fromFile.close();
          completedLoad = true;
        }
        catch(Exception ex) {
          ex.printStackTrace();
          completedLoad = false;
	}
        if (completedLoad) {
          out.println(stringPortfolio);
          out.flush();
	  System.out.println("XML Portfolio with ID="+portfolioID+"
sent");
        }
	// ****** da qui in poi si blocca  **** perche ?
        String clientResponse = in.readLine();
      }
 
      System.out.println("closing...");
    }// try
    catch (IOException e) {
    } finally {
      try {
        socket.close();
      } catch(IOException e) {
          System.out.println("Si _ verificato un errore");
          e.printStackTrace();
      }
    }
//--------------------------------------------------------------
E' questo il modo giusto per leggere la risposta del client o sbaglio
qualche cosa ?
grazie.
		Davide Manzoni

 server per gestire il socket.
Mi sa che presumi male.
Ciao,
 Stefano
----------
"X WindowSSS, teSSSoro mio... lo odieremo per SSSempre"
Bill Gollum
----------

Mi sa che presumi male.
quindi la readLine e' bloccante ? Ottimo. E' vero che il server si
blocca, ma si blocca anche il client se l'ultima readLine nel codice che
ho postato e' presente.
Se invece non e' presente il client riceve correttamente i dati.
_______________________________________________________
   Davide Manzoni -    email: 
dman...@racine.ra.it
The salesman said "This machine requires Windows 95, NT,
or better."   The only thing I could think of was Linux.
_______________________________________________________

Se invece non e' presente il client riceve correttamente i dati.
Mi rispondo da solo: non ho capito dov'e' il problema, ma l'ho aggirato,
facendo spedire al server una stringa di riconoscimento di fine di
spedizione del file (stringa che non puo' stare nel file), e testando
l'arrivo di quella nel client invece che testando null (che non
funzionava correttamente se poi il server eseguiva una readLine.
