我想获取shell脚本的输出,它的输出非常大,并且还有等待时间。从某种意义上说,等待时间输出将等待一段时间,然后再次它将继续生成输出。我无法检索输出。
这是我的客户代码:
import java.awt.List;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Iterator;
public class Client
{
private static Socket socket;
public static void main(String args[])
{
try
{
String host = "localhost";
String command="sudo su - websphe";
int port = 25000;
InetAddress address = InetAddress.getByName(host);
socket = new Socket(address, port);
//Send the message to the server
OutputStream os = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
String a ="./startSDPShakeOut.sh RELEASE39 IT3";
String sendMessage1 = a + "\n";
bw.write(sendMessage1);
bw.flush();
System.out.println("Message sent to the server : "+sendMessage1);
//Get the return message from the server
InputStream is = socket.getInputStream();
System.out.println(is.read());
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
System.out.println(br.lines());
String str="";
ArrayList<String> ar= new ArrayList<>();
System.out.println("getting output");
while(br.ready())
{
//str=br.readLine()+"\n"+str;
//str=br.readLine();
ar.add(br.readLine());
}
// System.out.println("Message received from client is "+str);
Iterator itr=ar.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}
socket.close();
}
catch (Exception exception)
{
exception.printStackTrace();
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
finally
{
//Closing the socket
try
{
socket.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
这是我的服务器代码:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server
{
private static Socket socket;
public static void main(String[] args)
{
try
{
int port = 25000;
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("Server Started and listening to the port 25000");
//Server is running always. This is done using this while(true) loop
while(true)
{
//Reading the message from the client
socket = serverSocket.accept();
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String str = br.readLine();
System.out.println("Message received from client is "+str);
//Multiplying the number by 2 and forming the return message
String returnMessage="";
try
{
System.out.println("inside try block"+str);
Process p = Runtime.getRuntime().exec(str);
p.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String a="";
while ((a = reader.readLine()) != null) {
returnMessage=returnMessage+"\n"+a;
}
}
catch(NumberFormatException e)
{
//Input was not a number. Sending proper message back to client.
returnMessage = "Please send a proper number\n";
}
catch(Exception e)
{
System.out.println("hi");
}
System.out.println(returnMessage+" : ");
//Sending the response back to the client.
OutputStream os = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
bw.write(returnMessage+"\n");
System.out.println("Message sent to the client is "+returnMessage);
bw.flush();
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
try
{
socket.close();
}
catch(Exception e){}
}
}