【发布时间】:2017-06-19 15:08:55
【问题描述】:
我正在尝试将消息从服务器传递到终端中的客户端。我希望程序做的是,在客户端,它应该能够输入命令,从服务器获取响应,并且能够在不重新启动客户端(通过 java 客户端)的情况下输入另一个命令。
Client.java
Socket socket = new Socket(host, port);
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String response = "";
boolean continuation = true;
while(continuation) {
Scanner input = new Scanner(System.in);
String command = (input.nextLine()).toString();
bw.write(command+"\r\n");
bw.flush();
if(command.equals("cmd1") {
while ((response = br.readLine()) != null) {
System.out.println(response);
}
}
System.out.println("This line will not execute as well.");
}
Server.java
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
OutputStream os = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
String[] in = br.readLine().split("\\s+");
String command = in[0];
if(command.equals("cmd1")) {
String response = "";
response = response + "RESPONSE:\r\n";
response = response + "This is a response.\r\n";
bw.write(response);
bw.flush();
}
如果我在Client.java中不放while((response = br.readLine()!= null) { ... },是可以在终端输入多个输入的,但是如果我放的话,它打印来自服务器的响应,如果不重新启动客户端,则无法完成另一个输入。
任何帮助将不胜感激。
谢谢
【问题讨论】:
-
重启客户端是什么意思?您的意思是说当响应为 null 时 Client.java 将被终止?
-
当我在终端中输入一些命令并回车时,服务器应该会发送一个响应,该响应会在客户端打印。但是,在此之后,无法输入另一个命令并按 Enter 并接收来自服务器的响应。我必须终止客户端并重新启动它。
-
我希望它能够连续输入命令并获得响应,而无需通过 java Client 重新启动 Client
标签: java sockets io client-server