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