[英]How to receive messages from server to client, without prompt from client
So I am making a basic chat application. 所以我正在制作基本的聊天应用程序。 This is a snippet of the code from the client. 这是来自客户端的代码片段。 Here I am sending information to the server and then getting a reply. 在这里,我将信息发送到服务器,然后得到答复。
However, sometimes the server will send messages to the client without requiring the client to send information to the server first. 但是,有时服务器会向客户端发送消息,而不需要客户端首先向服务器发送信息。 How do I implement this? 我该如何实现?
while (true){
String sentence;
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
sentence = inFromUser.readLine();
// send to server
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
outToServer.writeBytes("\n");
// create read stream and receive from server
BufferedReader FromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
System.out.println(FromServer.readLine());
}
For example, the server might send random bits of information to me at random intervals. 例如,服务器可能以随机间隔向我发送随机信息位。 But I can only receive them when I send the server something first. 但是,当我先发送服务器时,我只能收到它们。 But if I implement something likes this instead (shown below), I will no longer be able to send information to the server and can only act as a receiver. 但是如果我实现类似的东西(如下所示),我将无法再向服务器发送信息,只能充当接收器。 But I want to be able to send information and receive information when necessary without having to send something first. 但我希望能够在必要时发送信息并接收信息,而无需先发送信息。
while (true){
// receive from server only
BufferedReader FromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
System.out.println(FromServer.readLine());
}
What I changed in reply to first comment. 我在回复第一条评论时所做的更改。 I followed your code so this is what I did. 我按照你的代码,这就是我做的。 However, i still can't seem to receive messages spontaneously ie i still need to press enter or type in an input to receive any server information sent at random times: 但是,我似乎仍然无法自发地接收消息,即我仍然需要按输入或键入输入以接收随机发送的任何服务器信息:
BufferedReader FromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
while (true) {
// Check if there's anything to receive
while (FromServer.ready()) {
// receive from server
System.out.println(FromServer.readLine());
}
String sentence;
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
sentence = inFromUser.readLine();
// write to server
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
outToServer.writeBytes(sentence + '\n');
// Send data to the server here if required.
}
Change it to something like this:- 把它改成这样的东西: -
BufferedReader FromServer =
new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
while (true) {
// Check if there's anything to receive
while (FromServer.ready()) {
// receive from server
System.out.println(FromServer.readLine());
}
if (inFromUser.ready()) {
int ch = inFromUser.read();
// write to server
outToServer.writeChar(ch);
}
}
Now the client will read anything that's there to be read, and can send data if/when required. 现在,客户端将读取任何要读取的内容,并且可以在需要时发送数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.