简体   繁体   English

如何在没有客户端提示的情况下从服务器接收消息到客户端

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

相关问题 Java客户端套接字:无法从服务器接收消息到客户端 - Java client-socket:Cannot receive messages from server to client 我需要客户端能够从服务器接收多条消息 - I need the client to be able to receive multiple messages from the server 客户端通过套接字从服务器接收消息时出现一些问题 - some problem when client receive messages from server though socket 服务器未从客户端收到更多消息 - Server doesn't receive more messages from client 客户端无法从服务器套接字编程Java接收消息 - Client not able to receive messages from Server Socket programming Java Python 客户端没有收到来自 Spring websocket 服务器的消息 - Python client doesn't receive messages from Spring websocket server 如何从服务器中的客户端接收输入? - How to receive input from client in server? 如何使TCP客户端发送请求并接收响应。还接受服务器推送的消息 - How to make TCP client which send request and receive response .Also accepts the messages pushed from server 如何使用RabbitMQ Java从每个客户端发送/接收消息 - How to send/receive messages from every client with RabbitMQ Java Java-客户端-服务器来自客户端的多个消息 - java - client - server multiple messages from client
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM