2017-12-20 16 views
0

私は文字列をサーバーに送ることができ、サーバーも同じ文字列を受け取りました。サーバは肯定応答を送信できますが、サーバが接続を終了するまで、クライアントは肯定応答を受け取っていません。しかし、私は接続を閉めたくありません。接続を閉じずに確認応答を表示するにはどうすればよいですか?サーバソケットを閉じずにクライアント側で確認応答を受け取るにはどうすればよいですか?

//This is Client  
public void Actuator1_Stop(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    try { 
     Socket socket = new Socket("localhost", 1028); 
     DataOutputStream dout = new DataOutputStream(socket.getOutputStream()); 
     dout.writeUTF("Stop_Actuator"); 
     dout.flush(); 
     System.out.println("Command Sent = Stop_Actuator"); 

     //Get the return message from server 
     InputStream is = socket.getInputStream(); 
     InputStreamReader isr = new InputStreamReader(is); 
     BufferedReader br = new BufferedReader(isr); 
     String message = br.readLine(); 
     System.out.println("ACK received from the server : " +message); 
     socket.close(); 
    } catch(Exception exception) { 
     exception.printStackTrace(); 
    } 
} 

//This is Server 
class Socket4 implements Runnable { 
    public void run() { 
     try { 
      ServerSocket ss = new ServerSocket(1028); 
      while(true) { 
       Socket s = ss.accept(); 
       DataInputStream dis = new DataInputStream(s.getInputStream()); 
       String cmd = dis.readUTF(); 
       System.out.println("Command= "+cmd); 

       //Sending the response back to the client 
       String ack = null; 
       OutputStream os = s.getOutputStream(); 
       OutputStreamWriter osw = new OutputStreamWriter(os); 
       BufferedWriter bw = new BufferedWriter(osw); 

       if(cmd.equals("Stop_Actuator")) { 
         ack= "Ok"; 
         bw.write(ack); 
        } else { 
         ack = "Error"; 
         bw.write(ack); 
        } 

        System.out.println("ACK sent to the client is "+ack); 
        bw.flush(); 
      } 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

public class MyServer { 
    public static void main(String[] args) { 
     Socket1 s1 = new Socket1(); 
     Socket2 s2 = new Socket2(); 
     Socket3 s3 = new Socket3(); 
     Socket4 s4 = new Socket4(); 

     Thread t1 = new Thread(s1); 
     Thread t2 = new Thread(s2); 
     Thread t3 = new Thread(s3); 
     Thread t4 = new Thread(s4); 

     t1.start(); 
     t2.start(); 
     t3.start(); 
     t4.start(); 
     } 
    } 
} 
+1

'ack = "Ok";' - それはreadline()が返すテキスト行を見ていますか? –

+0

ありがとうございます。出来た。今私はクライアント側でおかげでいる。 –

+0

なぜ一方向に行を送り、もう一方の方向に 'writeUTF()'を使うのですか?一貫してください。 – EJP

答えて

0

どのようにして、接続を閉じずに謝辞を表示する必要がありますか?あなたは完全なラインを送信していないサーバーからしかし

String message = br.readLine(); 

:あなたは、読み取りラインをやっている、あなたのクライアントで

。メッセージ末尾に行終了文字を追加する必要があります。

ack = "Ok\n"; 
bw.write(ack); 

read-lineが完了し、クライアントはackを取得します。明らかにエラーackに改行("Error\n")も必要です。

Socket4.run()で作成された受け入れられたソケットとサーバーソケットを正しく閉じていることを確認してください。私はあなたのコードの一部を投稿しているだけで、try/finallyブロックでそれらのソケットを閉じてください。

+0

ありがとうございます。出来た。今私はクライアント側でおかげでいる。 –

関連する問題