在Java Socket编程中执行脚本。但是它不返回输出。输出非常大且动态

时间:2018-07-24 13:59:52

标签: java server socket.io client serversocket

我想获取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){}
            }
        }

0 个答案:

没有答案