2017-06-04 7 views
0

私はサーバーとクライアントを持っています。(Java)ソケットのBufferedReaderは一度に1行しか必要とせず、次の行を受け取る前にクライアント入力が必要です

私の問題は、クライアントが一度にBufferedReader inから1行しか受信できないことです。次の行を受け取るには、クライアントが応答する必要があります。一度にすべての入力をクライアントに受信させるにはどうすればよいですか?たとえば、複数行の入力。

try (
     Socket socket = new Socket(hostName, portNumber);     //Connect to server 
     PrintWriter out = new PrintWriter(socket.getOutputStream(), true); //The socket output stream sends an output to the server 
     BufferedReader in = new BufferedReader(
      new InputStreamReader(socket.getInputStream()));    //The socket input stream receives an output from the server 
    ) { 
     BufferedReader stdIn = 
      new BufferedReader(new InputStreamReader(System.in));   //The BufferedReader allows the client's input to be iterated through 
     String fromServer, 
       fromUser; 

     while ((fromServer = in.readLine()) != null) {      //while there is an input from the server 
      System.out.println("Server: " + fromServer);     //Print the input 

      fromUser = stdIn.readLine();         //Receive a line of user input 
      if (fromUser != null) { 
       System.out.println("Client: " + fromUser); 
       out.println(fromUser);          //Send it out to the server 
      } 
     } 
    } catch [...] 
+0

おそらく別のスレッドを使用するのか?あなたはこれを試してみましたか? –

+0

なぜ気にしますか?どのような違いがありますか? – EJP

+0

@EJP表示するには完全な複数行のメッセージが必要です –

答えて

0

メッセージを送信するメッセージとメッセージを受信する別のスレッドを使用できます。

クライアント側コード:

class Client5 extends Thread{ 

static Socket s; 
static int end=0; 

public void run(){ 
    String str1; 
    //read data coing from server 
    try{ 
     BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream())); 
     while(end==0)//recieve from server 
     { 
      str1=br.readLine(); 
      System.out.println("from server:"+str1); 
     } 
     br.close(); 
    } 
    catch(Exception e){ 
     System.out.println(e); 
    } 

} 

public static void main(String[] args) throws Exception{ 

    s=new Socket("192.168.43.231",1111); 
    //send data to server 
    DataOutputStream dos=new DataOutputStream(s.getOutputStream()); 


    //read from keyboard 
    BufferedReader kb=new BufferedReader(new InputStreamReader(System.in)); 

    String str; 

    Client5 read=new Client5(); 
    read.start(); 
    //reapea till exit is typed by client 
    while(!(str=kb.readLine()).equals("exit")){ 

     dos.writeBytes(str+"\n");//send to server 
    } 
    dos.writeBytes(str+"\n"); 
    end=1; 
    s.close(); 
    dos.close(); 
    kb.close(); 
} 

}

関連する問題