Newsgroup: it.comp.java
Titolo: Non posso creare un OutputStream su di una Socket

Sto realizzando un programma per l'università, ma ho un problema...
DEvo far connettere un server e un client via remoto, ho creato una
classe che estende una ServerSocket ed una una Socket ( devo estendere la socket
per come ho implementato il programma
).
Il problema che ho ora e che il client riesce a scrivere un OutputStream sulla
socket ma il server no riesce solo a leggere, anzi quando prova ad invocare un
qualsiasi metodo mi produce una IOException e lo stacktrace mi avvisa che
la socket e chiusa ( ma se io ci ho appena letto da quella socket??? ).
Non so proprio come muovermi, o letto i manuali che ho e la
documentazione delle API ma non ho trovato soluzione...
Che cosa c'è che sbaglio???
Ho il dubbio ora che sulla socket possa scrivere solo il client e il
server possa solo leggere ( cosa che mi farebbe riflettere su che cosa ho
capito di tutto ciò che sto facendo... ) non è così vero???
Grazie
Ivan

 capito di tutto ciň che sto facendo... ) non č cosě vero???
Devi fare attenzione che il client, finito di scrivere, non chiuda lo
stream.
Chiuso lo stream si chiude anche la connessione.
Posta i due pezzi di codice: scrittura del client e lettura del server
Una volta aperta una connessione socket client e server hanno gli stessi
diritti di leggere/scrivere sul socket.
J

server possa solo leggere
Non è che si capisca molto cosa vuoi dire, ma direi proprio che non è 
questo il motivo :-)
-- 
Ciao
	Fabrizio C.



Il client richiede lo scaricamento del file tramite questo metodo che
invia il nome del file
 private void download () throws IOException , java.net.UnknownHostException {
    JFile jFile = ( JFile ) files.get ( tblResult.getSelectedRow() );
    JSocket clientConn = new JSocket ( jFile.getIp() , Utility.CLIENT_PORT );
    Vector temp = new Vector ();
    temp.add( jFile.getFile() );
    clientConn.write( temp );
  }
Questo č il metodo del Server che legge sulla socket il nome del
file che č richiesto per il download e PROVA AD INVIARLO
  public void run ( ) {
    jClient.writeLog ( "Autentication procedure started..." );
    jClient.writeLog ( "Recive file request..." );
    String jFile = "";
    try { jFile = ( String ) conn.read().get( 0 ); }
    catch ( IOException e ) { jClient.writeLog ( "Unable to read file request" ); }
    jClient.writeLog ( "Finding file " + jFile + " ..." );
    try {
      File file = new File ( new JapsterClient_ProprietiesFile ().getSharedDir() , jFile );
      if ( file.exists() ) {
        DataOutputStream out = new DataOutputStream ( conn.getOutputStream() );
        byte [] jByte = null;
        new FileInputStream ( file ).read( jByte );
        out.write ( jByte );
      }
    }
    catch ( IOException e ) { jClient.writeLog ( "Unable to find the requested file" );
 }
Ora il server dovrebbe rispondere inviando uno stream contenente il file
richiesto.... ( P.S. E' giusto il modo in cui invio lo stream del file??
) Dopo aver fatto conn.read().get(0) ( riga 5 ) non posso fare piů nulla
sulla socket che da IOException, la read la fa correttamente infatti
riesco a leggere il nome file che mi viene richiesto...
write puň scrivere una Vector perchč ho esteso la Socket ecco il metodo
di write
  public void write ( Vector aMessage ) throws IOException {
      ostream = new BufferedWriter ( new OutputStreamWriter (
                this.getOutputStream() ) );
      for ( int i = 0 ; i < aMessage.size() ; i++ ) {
        String message = ( String ) aMessage.get(i);
        ostream.write( message , 0, message.length() );
        ostream.newLine();
      }
      //invio del messaggio di chiusura
      ostream.write( "" ,0,0) ;
      ostream.newLine () ;
      ostream.close ();
  }
Ora che ho letto ciň che mi hai scritto non č che la causa puň essere
ostream.close () ? ( ultima riga ) Oppure puň essere dovuto al fatto che
quando leggo, non leggo tutta la coda dello stream, infatti mi accorgo
ora che leggo solo il primo dato perchč so che ce ne uno ma non guardo se
č l' ultimo? ( riga 5 )
Grazie
Ivan