-4

別のJavaプログラム内でプログラムを開始する方法が初めてです! そして、私はそれを呼び出す方法がわかりません。最初の質問は、新しいスレッド内でそれを行う必要があるということですか? 2 番目の質問は、新しいプログラムを呼び出す方法です。呼び出したいプログラムは「wondershaper」です。このプログラムを実行するためにubuntu 12.04を使用し、コマンドラインで書き込みます。「sudo wondershaper eth0 10000 1000」。一般的なプログラム内でどのように記述できますか? 私はそれのレートを処理したいサーバーを持っています! それが私がそれを使う理由です。だから私はマルチスレッドサーバーを持っていて、コードは

class Client extends Thread {
    private Socket connectionSocket;


    public Client(Socket c) throws IOException {
        connectionSocket = c;
    }

    public void run() {

        String path = "C:/pao/new2/";

        File folder = new File(path);
        File[] listOfFiles = folder.listFiles();


        try {

            String fileToSendStr = readFile();
            File fileToSend = null;
            for (File f : listOfFiles)

            {               
                if (f.getName().equals(fileToSendStr)) {
                    fileToSend = f;
                    break;
                }
            }
            //System.out.println("Connescting to Client to recieve the part " +fileToSendStr);
            if (fileToSend == null) {

            }
            System.out.println("Sending the chunk to Client " + fileToSendStr + "to the client: " +connectionSocket.getRemoteSocketAddress().toString());
            java.util.Date date= new java.util.Date();
             System.out.println(new Timestamp(date.getTime()));
            long length = fileToSend.length();
            byte [] longBytes = new byte[8];
            ByteBuffer bbuffer = ByteBuffer.wrap(longBytes);
            bbuffer.putLong(length);
            connectionSocket.getOutputStream().write(longBytes);

            BufferedOutputStream bout = new BufferedOutputStream(connectionSocket.getOutputStream());
            BufferedInputStream bain = new BufferedInputStream(new FileInputStream(fileToSend));

            byte buffer [] = new byte [1024];
            int i = 0;
            while((i = bain.read(buffer, 0, 1024)) >= 0){

                bout.write(buffer, 0, i);


            }



            System.out.println("chunk sended");
            java.util.Date date1= new java.util.Date();
             System.out.println(new Timestamp(date1.getTime()));
            bout.close();
            bain.close();


        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    private String readFile() throws IOException {

        BufferedReader r = new BufferedReader(new InputStreamReader(
                connectionSocket.getInputStream()));
        return r.readLine();

    }
}

そのため、クライアントが私に送信した readFile を読み取ると、「wondershaper」を起動するレート文字列の場合、「sudo wondershaper eth0 10000 rate」内にレートを入れてプログラムを起動します

4

1 に答える 1

1

Process aProcess = Runtime.getRuntime().exec("cmd");//ここで任意のプロセスを渡すことができます

このプログラムの出力を読むこともできます。

InputStream is = aProcess.getInputStream();

Ps:引数とともに任意のプロセスを渡すことができますが、>>、2>、または | などを渡すことはできません。または*のようなワイルドカード

――コメントより

于 2013-07-23T19:37:24.043 に答える