2017-06-04 16 views
0

我有一个服务器和一个客户端。(Java)一个套接字的BufferedReader一次只需要一条线,在接收下一条线之前需要客户端输入

我的问题是,我的客户一次只能从BufferedReader in接收一行。要接收下一行,客户必须回复。我如何让客户一次收到所有的输入?例如,多线输入。

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

}

相关问题