私はClient
という文字列のサーバに文字列LISTALL
を送ります。 その後、サーバはps -e
コマンドを使用してシステム上の実行中のプロセス(Linux)をすべて確認し、その結果をクライアントに返す必要があります。 明らかに、結果は複数の文字列で構成されています。クライアントを受信してすべて保存するにはどうしたらいいですか?Javaクライアント/サーバ - ソケット接続を介して複数の文字列を送信
今、これは私がクライアントから得るものです:
Message sent to the server: LISTALL Message received from the server: null
し、サーバから:
Server started and listening to.. Message received from client: LISTALL
そして、それはようps -e
コマンドからの結果を示しています期待される。
マイコード:
サーバー:
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 list = br.readLine();
System.out.println("Message received from client is "+list);
//Sending the response back to the client.
OutputStream os = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
String returnMessage;
try
{
ProcessBuilder build = new ProcessBuilder("ps", "-e");
Process proc = build.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
while (reader.readLine() != null) {
returnMessage=reader.readLine();
bw.write(returnMessage);
proc.waitFor();
System.out.println("Message sent to the client is "+returnMessage);
bw.flush();}
}
catch(NumberFormatException e)
{
//Input was not a number. Sending proper message back to client.
returnMessage = "Please send a proper number\n";
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
try
{
socket.close();
}
catch(Exception e){}
}
}
}
クライアント:
public class Client
{
private static Socket socket;
public static void main(String args[])
{
try
{
String host = "localhost";
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 list = "LISTALL";
String sendMessage = list + "\n";
bw.write(sendMessage);
bw.flush();
System.out.println("Message sent to the server : "+sendMessage);
//Get the return message from the server
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
while (br.readLine() != null) {
String message = br.readLine();
System.out.println("Message received from the server : " +message);
}}
catch (Exception exception)
{
exception.printStackTrace();
}
finally
{
//Closing the socket
try
{
socket.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
}
何らかの理由で、私は依然としてクライアントから同じ出力を得ています。つまり、 'サーバから受信したメッセージ:....'の代わりに正しい出力が続き、 'サーバから受信したメッセージ:null'と表示されます。 – gambit20088
このコードを実行しなかった場合のみ。このコードでは、あなた自身で見ることができるように、不可能です。あなたはこのミスを2か所に持っています。 – EJP
だから私は同じループループで修正する必要がありますか? – gambit20088