gpt4 book ai didi

Java 客户端/服务器 - 通过 Socket 连接发送多个字符串

转载 作者:可可西里 更新时间:2023-11-01 02:48:15 26 4
gpt4 key购买 nike

我有一个程序 Client 向服务器发送字符串 LISTALL。之后,服务器需要使用ps -e 命令检查系统(Linux)上所有正在运行的进程,然后将结果返回给客户端。显然结果是由多个字符串组成的,那么如何让客户端接收并存储它们呢?

现在,这是我从客户那里得到的:

发送到服务器的消息:LISTALL
从服务器收到的消息:null

从服务器:

服务器启动并监听..
从客户端收到的消息: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();
}
}
}
}

最佳答案

您的读取循环不正确。它们应该是一般形式:

String line;
while ((line = reader.readLine()) != null) {
// Do something with `line`
}

目前,您将丢弃所有奇数行,如果行数为奇数,则打印空值。

关于Java 客户端/服务器 - 通过 Socket 连接发送多个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42047834/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com