2017-02-02 5 views
0

端末のサーバーからクライアントにメッセージを渡そうとしています。私がしたいのは、クライアントでコマンドを入力し、サーバーからの応答を取得し、クライアントを再起動せずに別のコマンドを入力できるようにすることです(java Clientによって)。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(); 
} 

私はしばらくの間((応答= br.readLine()!= nullのを入れていない場合){。 ..} Client.javaでは、端末に複数の入力を入力することはできますが、入力するとサーバからの応答が出力され、クライアントを再起動しなければ別の入力を行うことはできません。

ご協力いただければ幸いです。

おかげ

+0

クライアントを再起動するの何を意味するのですか?レスポンスがnullの場合、Client.javaは終了していますか? –

+0

端末で何らかのコマンドを入力してEnterキーを押すと、クライアント端末に印刷されたサーバから応答が送られます。しかし、その後、別のコマンドを入力して、サーバからの応答を入力して受信することはできません。クライアントを終了してもう一度再起動する必要があります。 – user2556140

+0

私は、コマンドを入力して、クライアントをJavaクライアントから再起動することなく、継続的に応答できるようにしたいと考えています。 – 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で可能ですか?また、クライアントからの継続的な入力が必要です。例えば。クライアント – user2556140

+0

から CMD1(ここでは終了せずに)クライアント から 応答 CMD2 秒の応答はい改行はのwriteUTFでも可能です!クライアントから連続して入力したい場合は、別のポートで新しいConnectionを設定するか、レスポンスを常に待っていて、2種類の応答を分割します。1.コマンドのレスポンスで、2.一部の一般的なリスナとして他のコマンド.. –

+0

ユーザーが 'exit'を入力するまでクライアントをループする方法は?サーバはレスポンスを送信し、クライアントはそれを印刷し、それから別の 'input'へのループに行くことも、クライアントを終了させることもありません。これは、端末の点滅カーソル – user2556140

関連する問題