Lecture de plusieurs lignes de serveur

Zojo:

Je suis ouvert à d'autres façons de faire, mais voici mon code:

public class Client {
    public static void main (String [] args) {
        try(Socket socket = new Socket("localhost", 7789)) {
            BufferedReader incoming = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            PrintWriter outgoing = new PrintWriter(socket.getOutputStream(),true);
            StringBuilder sb = new StringBuilder();

            Scanner scanner = new Scanner(System.in);
            String send = "";
            String response = "";

            while (!send.equals("logout")){
                System.out.println("Enter Command: ");
                send = scanner.nextLine();
                outgoing.println(send);
                while ((response = incoming.readLine()) != null) {
                    System.out.println(response);
                    sb.append(response);
                    sb.append('\n');

                    }
            }
        } catch (IOException e) {
            System.out.println("Client Error: "+ e.getMessage());
        }
    }
}

Je reçois la réponse du serveur, mais le programme est coincé dans la boucle while intérieure while ((response = incoming.readLine()) != null), donc je ne peux pas entrer dans une deuxième commande. Comment puis-je briser la boucle si la réponse entrante est fait?

Mirea Radu:

Le problème est que incoming.readLine()renverrons seulement nullsi la prise est fermée, sinon il va bloquer et attendre plus d' entrée du serveur.

Si vous pouvez changer le serveur, vous pouvez ajouter une marque que la demande a été entièrement traitée puis le vérifier comme celui - ci while ((response = incoming.readLine()) != "--finished--").

Si vous ne pouvez pas, essayez ceci:

while(response.isEmpty()){
    if(incoming.ready()){ //check if there is stuff to read
        while ((response = incoming.readLine()) != null){
            System.out.println(response);
            sb.append(response);
            sb.append('\n');
        }
    }
}

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=371083&siteId=1
conseillé
Classement