程序沒報錯,執行到Runtime.getRuntime().exec(is.readLine());時沒看到任何效果,也不繼續執行接下來的代碼。is.readLine() 是"cmd /k start E://test.txt"。
public class Server {
public static void main(String [] args) {
try {
ServerSocket sersoc = null;
try {
sersoc = new ServerSocket(8399);
} catch (Exception e) {
// TODO: handle exception
}
Socket socket = null;
try {
socket = sersoc.accept();
} catch (Exception e) {
System.out.println("Error."+e);
}
String line = null;
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter os = new PrintWriter(socket.getOutputStream());
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
System.out.println(is.readLine());
Runtime.getRuntime().exec(is.readLine());
while(!line.equals("bye")){
os.println(line);
System.out.println("Server:" + line);
System.out.println("Client:" + is.readLine());
line = sin.readLine();
}
os.close();
is.close();
sersoc.close();
socket.close();
}catch (Exception e) {
// TODO: handle exception
System.out.println(e);
}
}
}
不能使用兩次readLine方法,因為第一次已經讀取了內容,下次exec的時候是處於等待輸入的狀態,他讀取不出來了,所以沒有執行,會一直等待輸入。解決辦法就是第一次讀取的時候將其轉換為變量,修改如下:
String command = is.readLine();
System.out.println(command);
Runtime.getRuntime().exec(command);
修改為上面的即可執行操作了,前提是你的command已經傳過來了啊。
你這個代碼只是server端的,看不到你的client端是怎麼寫的,因此需要你確保能夠讀取到你client端輸入的命令。
另外你的代碼中,line直接賦值了null,是不對的,即使你執行了命令,在下面的while判斷中也會報空指針的,這一行代碼:
while(!line.equals("bye"))
將line初始化修改一下。
此外,不建議使用BufferedReader方法來讀取client端傳送的內容,因為你要在client中輸入命令的話,必須手動加上
\r\n
否則server端讀取不到你輸入的命令,readLine是以換行符為讀取結束的。你可以參考下這個裡面介紹的讀寫方法。http://www.cnblogs.com/xignzou/p/3202346.html