简体   繁体   English

(Java)套接字的BufferedReader一次只占用一行,在接收下一行之前需要客户端输入

[英](Java) BufferedReader of a socket only takes one line at a time, requires client input before receiving the next line

I have a server and a client. 我有一个服务器和一个客户端。

My issue is that my client can only receive one line from the BufferedReader in at a time. 我的问题是我的客户端一次只能从BufferedReader in接收一行。 To receive the next line, the client must respond. 要接收下一行,客户端必须响应。 How can I make the client receive all of the input at once? 如何使客户一次接收所有输入? For instance, a multi-line input. 例如,多行输入。

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 [...]

You can use different threads - one to send messages and another to recieve messages. 您可以使用不同的线程-一个线程发送消息,另一个线程接收消息。

Client side code: 客户端代码:

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

} }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM