Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 29
  1. #1
    Utente di HTML.it L'avatar di AtoXx
    Registrato dal
    Nov 2007
    Messaggi
    119

    [Java]Problema readLine() su connessione ssh

    Salve a tutti, ho un problema ed è una mattinata che ci
    Praticamente ho fatto una connessione ssh ,ad una macchina linux, tramite la libreria jsch e fin qui tutto bene.

    Ho problemi su come leggere l'output della macchina linux a cui mi collego, nel senso che se per esempio eseguo "ls" dopo che ha finito di listare il contenuto mi si blocca sul comando readLine(), è come se non riceve EOF o comunque non capisce quando la macchina linux ha finito di inviare "risultati".

    Ho cercato online e tutti quelli che hanno fatto la mia stessa cosa non hanno avuto questo problema.

    Come posso risolvere???


    codice:
    class Ssh {
    
        JSch jsch;
        Channel channel;
        Session session;
        protected String utente, pw, ip;
        String risultato="a";
        BufferedWriter bw;
        BufferedReader br;
    
        Ssh(String ut, String psw, String ad) {
            utente = ut;
            pw = psw;
            ip = ad;
                }
        
        void connetti() {
            try {
                jsch = new JSch();
                session = jsch.getSession(utente, ip, 22);
                session.setConfig("StrictHostKeyChecking", "no");
                session.setPassword(pw);
                session.connect(30000);
                channel = session.openChannel("shell");
                bw = new BufferedWriter(new OutputStreamWriter(channel.getOutputStream()));
                br = new BufferedReader(new InputStreamReader(channel.getInputStream()));
                channel.connect(30000);
                   } 
             catch (Exception e) {
                System.err.println(e);
                                         }
        }
                
     
        leggi() {
            try {
                System.out.println("sono nella leggi");
                
                while (risultato!=null) {
                    
                    System.out.println("br.readline");
                    risultato = br.readLine();
                    System.out.println(risultato);
                           }
         }          }
    
    }

    Grazie, per qualunque aiuto

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    non ho letto tutto, ma hai provato con stream buffered? mi sembrano più indicati per letture via rete
    RTFM Read That F*** Manual!!!

  3. #3
    Utente di HTML.it L'avatar di AtoXx
    Registrato dal
    Nov 2007
    Messaggi
    119
    Originariamente inviato da valia
    non ho letto tutto, ma hai provato con stream buffered? mi sembrano più indicati per letture via rete
    Non ho provato ma adesso ci provo

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    mi hai capito che con "buffered" intendo che lavorano su byte , vero?
    RTFM Read That F*** Manual!!!

  5. #5
    Utente di HTML.it L'avatar di AtoXx
    Registrato dal
    Nov 2007
    Messaggi
    119
    Originariamente inviato da valia
    mi hai capito che con "buffered" intendo che lavorano su byte , vero?

    Dici di usare un BufferedInputStream e poi faccio la read dando un array byte, no?

    Cioè ho fatto questo codice

    codice:
    byte[] buffer = new byte[1024];
                 int bytesRead = 0;     
    while ((bytesRead = bis.read(buffer)) != -1) {      
     String risultato = new String(buffer, 0, bytesRead);       
    System.out.print(chunk);       
    arr.add(risultato);}
    ma il risultato non cambia :S

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    riletto bene. nemmeno con stream a byte risolvi.
    Il punto è che si blocca sulla readline perché per lui la comunicazione è finita, ma non è chiusa la connessione, ergo è in attesa di altri dati.
    Si dovrebbe in questo caso usare stream a byte, inviare quelli e usare sequenze note per la chiusura, altrimenti questo è un errore in cui cadi
    RTFM Read That F*** Manual!!!

  7. #7
    Utente di HTML.it L'avatar di AtoXx
    Registrato dal
    Nov 2007
    Messaggi
    119
    ma il problema è che non sono io ad inviare ma il pc col server ssh. Quindi non c'è soluzione?

    Se no dovrei fare questa ricezione in un thread che sta sempre in ascolto, così almeno non mi blocco sulla readline, no???
    Mi viene in mente solo questo

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    eh? cioè che vuoi dire?
    non sei tu a controllare l'ssh server?
    RTFM Read That F*** Manual!!!

  9. #9
    Utente di HTML.it L'avatar di AtoXx
    Registrato dal
    Nov 2007
    Messaggi
    119
    invio comandi da java tramite ssh, ad un pc con linux.
    La parte di java che ho fatto è il client ssh.

    Forse ho capito male questo
    Si dovrebbe in questo caso usare stream a byte, inviare quelli e usare sequenze note per la chiusura, altrimenti questo è un errore in cui cadi

    tu(posso darti del tu,vero?) mi hai scritto di usare sequenze note per la chiusura ma non posso usare sequenza note perchè l'output non lo faccio io. Non riesco a spiegarmi bene credo

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    147
    Non ho analizzato tutto il codice, ma tieni presente che la readLine() è una funzione bloccante quindi il flusso di esecuzione rimane in attesa di ricevere dati dallo stream (anche se non arriva più nulla) fino a quando non trova una condizione di uscita... Quindi o fai quest'operazione in un altro thread (come hai giustamente pensato) o inserisci un pattern di confronto (ad esempio il prompt della shell), cosicché quando arriva dallo stream termini il ciclo di lettura e passi alla prossima istruzione.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.