以Java為例,使用Socket的概念實作遠端下達指令,並取得回傳值。但此程式還有很多問題存在,所以希望各位若有使用的人,也可以提供一下意見,謝謝囉~~!
程式碼如下:
import java.io.*;
import java.net.*;
public class CommandServer {
public static void main(String[] args) {
//使用 port number 1234
final int port = 1234;
ServerSocket serverSkt;
Socket skt;
BufferedReader sktReader;
PrintStream sktStream;
String message; //Client輸入的指令
String output = null; //Server回應的訊息
serverSkt = new ServerSocket(port);
while(true) {
System.out.printf("連接埠 %d 接受連線中......%n", port);
skt = serverSkt.accept();
System.out.printf("與 %s 建立連線%n",
skt.getInetAddress().toString());
sktReader = new BufferedReader(new
InputStreamReader(skt.getInputStream()));
while((message = sktReader.readLine()) != null) {
//使用"quit"指令來離開
if(message.equals("quit")) {
skt.close();
break;
}
//在Server的Console顯示Client輸入的指令
System.out.printf("Client: %s%n", message);
sktStream = new PrintStream(skt.getOutputStream());
//在Client顯示自己輸入的指令
sktStream.printf("Client: %s%n", message);
//此為使用Windows NT系統下的"令命提示字元"用法
String cmd="cmd /c ";
//若是Linux,可以使用以下的用法
//String cmd="/bin/bash -c ";
//接上Client輸入的指令
cmd += message;
Runtime rt = Runtime.getRuntime();
Process p = rt.exec(cmd);
BufferedWriter buffOut = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
BufferedReader buffIn = new BufferedReader(new InputStreamReader(p.getInputStream()));
buffOut.flush();
output = null;
//判斷Server是否有訊息要回覆給Client
while((output = buffIn.readLine())!= null)
{
//迴圈一次以一列字串訊息送給Client
sktStream.printf("echo: %s%n", output);
}
buffOut.close();
buffIn.close();
}
}
}
}
參考來源:
(1) 作者:swanky - 如何取得由Java程式呼叫的外在程式的執行結果?
(2) 良葛格學習筆記 - ServerSocket 類別
(3) JavaWorld@TW
(4) 良葛格學習筆記
留言列表