Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Richiamare iperf in java

    Salve ragazzi,
    Sto facendo un'applicazione java che richiama iperf, una utility che mi fa testare il traffico di una rete.
    Utilizzo la seguente istruzione:
    Runtime rt = Runtime.getRuntime();
    Process proc = rt.exec("cmd /c start src\\iperf3\\iperf3.exe -c 127.0.0.1 -p 5201");

    il mio problema è che alla fine dell'esecuzione del comando si chiude la finestra dos, vorrei evitare ciò. Avreste un suggerimento?
    Premetto che ho già usato:
    Process proc = rt.exec("cmd /c start src\\iperf3\\iperf3.exe -c 127.0.0.1 -p 5201 & pause")
    che non funziona.
    Vi ringrazio tantissimo

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    cmd /c start /wait .......

    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Non mi funziona ancora, mi si chiude lo stesso:-(
    public static void main(String [] args){


    try{


    Runtime rt = Runtime.getRuntime();

    Process proc = rt.exec("cmd /c start /wait src\\iperf3\\iperf3.exe -c 127.0.0.1 -p 5201");

    }catch(Exception e){
    System.out.println("Errore");
    }

    Questo è il mio codice..

  4. #4
    Ah dimenticavo, utilizzo Windows

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Vincenzo89 Visualizza il messaggio
    Non mi funziona ancora, mi si chiude lo stesso:-(
    Prima vorrei farti capire la differenza tra con e senza /wait:

    Apri un prompt dei comandi e fai:

    cmd /c start ping www.google.com

    Quando digiti invio si apre la finestra a sé stante con il ping. Ma il prompt dei comandi ritorna subito. Questo perché il solo start fa eseguire il comando in modo asincrono e cmd non ha nulla da attendere e termina subito.

    Ora fai:

    cmd /c start /wait ping www.google.com

    Ora il prompt non ritorna subito! Lo start apre una nuova finestra per il ping ma fa attendere cmd fino alla terminazione del comando. Quindi il prompt ritorna solo dopo che il ping ha terminato.


    Quote Originariamente inviata da Vincenzo89 Visualizza il messaggio
    Questo è il mio codice..
    C'è un'altra questione lato Java: il exec() è (quasi) immediato perché avvia il processo (in questo caso di 'cmd', ovvero la "shell") in modo asincrono. NON attende la terminazione del processo.
    Se vuoi attendere la terminazione devi farlo tu espressamente con proc.waitFor()
    Ultima modifica di andbin; 07-09-2015 a 11:41
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Grazie di avermi spiegato la differenza, però a me in entrambi i casi termina l'esecuzione del comando e la finestra dos si chiude.
    Quello che volevo fare io e fare il modo che è l'utente a chiudere la finestra dos come ad esempio facendo:
    Process proc = rt.exec("cmd /c start /wait src\\iperf3\\iperf3.exe -c 127.0.0.1 -p 5201 & pause");
    L'istruzione che passo come argomento al metodo exec esegue il comando iperf e poi si pone in pause, tale comando in una finestra dos funzina, quando la faccio eseguire in java invece non si pone in pause, ma la finestra si chiude.
    Riguardo all'istruzione:
    proc.waitFor();
    non mi cambiano le cose

  7. #7
    In poche parole vorrei che la seconda finestra, come per esempio nel caso del ping che si apre dopo, restasse aperta affinchè l'utente possa esaminare i risultati del ping prima che essa si chide

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Allora non ho capito: vuoi che cmd termini (quasi) subito oppure no?
    Oltretutto se metti un & pause questo è legato a cmd (non a iperf3.exe o nel mio esempio al ping). Quindi il pause è comunque fatto nel contesto del processo principale (cmd) lanciato da Java. E siccome pause fa dell'output (poco comunque) e chiede qualcosa in input, dovresti gestirlo lato Java, cosa che non stai facendo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Si, hai ragione.
    Volevo che cmd non terminasse (non so se mi sto esprimendo bene), ovvero la finestra in cui si visualizzano i risultati del ping non si chiudesse.

  10. #10
    cioè io potrei fare anche:
    Runtime rt = Runtime.getRuentime();
    Process proc = rt.exec("src\\iperf3\\iperf3.exe -c 127.0.0.1 -p 5201");
    e prendere i risultati con un inputstream, però vorrei fare vedere riga per riga le informazioni così come appaiono in una finestra dos, ma utilizzando gli stream mi visualizza il risultato tutto in una volta alla fine

Tag per questa discussione

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.