2017-02-02 29 views
0

Я пытаюсь передать сообщение от сервера к клиенту в терминале. То, что я хотел бы, чтобы программа выполняла, заключается в том, что на клиенте она должна иметь возможность вводить команду, получать ответ от сервера и иметь возможность вводить другую команду без перезапуска Client (через java Client).Java Client Server

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(); 
} 

Если я не ставлю в то время как ((ответ = br.readLine()! = NULL) {. ..} в Client.java, можно ввести несколько входов в терминале, но если я его положу, он печатает ответ с сервера, а другой вход не может быть выполнен без перезапуска клиента.

Любая помощь будет оценена по достоинству.

Благодаря

+0

что означают перезапуска клиента? Вы хотите сказать, когда ответ равен нулю, клиент.java завершается? –

+0

Когда я набираю некоторую команду в терминале и нажимаю enter, ответ должен быть отправлен сервером, который печатается на клиентском терминале. однако после этого невозможно ввести другую команду и нажать «Ввод и получение ответа от сервера». Я должен был бы завершить клиент и снова перезапустить его. – user2556140

+0

Я бы хотел, чтобы он мог вводить команду и получать ответ непрерывно без перезагрузки клиента клиентом java Client – user2556140

ответ

0

Это должно работать:

сервер:

DataInputStream dis = new DataInputStream(socket.getInputStream()); 
DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); 

boolean continuation = true; 
while (continuation) { 
    String command = dis.readUTF(); 
    //proceeed command 
    dos.writeUTF("response"); 
    dos.flush(); 
} 

Клиент:

DataInputStream dis = new DataInputStream(socket.getInputStream()); 
DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); 

    dos.writeUTF("your command"); 
    while (dis.available() == 0) { 
     try { 
      //wait for response 
      Thread.sleep(1); 
     } catch (InterruptedException ex) { 
      Logger.getLogger(RandomTest.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
    String response = dis.readUTF(); 
    //and so on 
+0

Мне нужно было бы передать строку с разрывом строки и возвратом каретки. Это возможно через writeUTF? Кроме того, мне нужно иметь постоянный ввод от Клиента. Например. cmd1 ответ от клиента (не выключая здесь) cmd2 второго ответа от клиента – user2556140

+0

Да линия перерыв также возможен с writeUTF! Если вы хотите иметь непрерывный ввод от Клиента, вы должны установить новое соединение по другому порту или все время ждать ответа и делиться ответом в двух типах: 1. В ответе команды и 2. как обычный прослушиватель для некоторых другие команды .. –

+0

Как просто зацикливаться на клиенте, пока пользователь не войдет в «выход»? на данный момент происходит то, что сервер отправляет ответ, клиент печатает его, а затем он не переходит в цикл к другому «вводу», и он не завершает работу с клиентом. Он просто показывает мигающий курсор терминала – user2556140

 Смежные вопросы

  • Нет связанных вопросов^_^