我正在尝试在两个JVM之间发送消息:服务器启动第二个进程。然后,第二个过程是向服务器发送消息,该消息将消息打印到控制台。代码如下:
public class Server
{
public static void main(String[] args)
{
Process client=null;
BufferedReader clientInput=null;
try
{
client=Runtime.getRuntime().exec("java Client");
clientInput=new BufferedReader(new InputStreamReader(client.getInputStream()));
}
catch(IOException e){}
System.out.println("Waiting for the client to connect...");
try
{
String msg=clientInput.readLine();
System.out.println(msg);
}
catch(IOException e){}
client.destroy();
}
}
和
public class Client
{
public static void main(String[] args)
{
BufferedWriter out = new BufferedWriter( new OutputStreamWriter(System.out));
try
{
out.write("Ready\n");
out.flush();
}
catch (Exception e){}
}
}
如果我运行它,我从服务器获取输出null。最后,沟通应该是双向的。非常感谢任何帮助。
编辑:我没有收到任何错误(只是从catch块中删除了print语句以节省空间)。
答案 0 :(得分:1)
您在流的末尾收到null。客户端正确启动,发送就绪,结束,因此流结束。
完全正确的行为。如果客户端自己结束(但是做了其他事情,比如在stdin上读取服务器消息),服务器永远不会收到空值。
编辑:永远不要(!!!!!)这样做:
catch(IOException e){}
至少写:
catch(IOException e){ e.printStackTrace() }
这会显示您的错误!
在我的公司,这是代码风格的基本规则之一!
答案 1 :(得分:1)
我认为你需要添加一个while循环:
while ((s = in.readLine()) != null && s.length() != 0)
System.out.println(s);
}