Eclipse Java Socket Anwendung - reader.readline().equals() funktioniert erst nach mehrmaligen eintippen?

Guten Tag,

ich habe ein Problem mit meiner Socket-Anwendung.

Nach der Verbindung via Telnet zu meinem Server soll man ein Passwort eingeben müssen, um sich zu autorisieren. Der Server wartet auf Clients und leitet sie an einen Thread weiter, wo die Übergabe des Passwortes stattfindet. Kommt es nun zur Eingabe des Passwortes (in diesem Fall "a"), zeigt der Server vorerst immer an, dass die Eingabe nicht mit dem Passwort übereinstimmt. Nach dem ich das aber mehrmals eingegeben habe, funktioniert es auf einmal, wobei es das schon beim ersten Mal hätte tun sollen. Es ist sehr seltsam und ich würde mich freuen, wenn mich einer von euch aufklären könnte.

public void listenToClients() {
  while(true) {
    try {
      Socket client = server.accept();
      PrintWriter writer = new PrintWriter(client.getOutputStream());
      BufferedReader eg = new BufferedReader(new InputStreamReader(client.getInputStream()));
      String message;

      Auth(writer, eg, client);
    }
    catch (IOException e) {
      e.printStackTrace();
    }
  }
}
                                            
public void Auth(PrintWriter writer, BufferedReader reader, Socket client) {
  writer.println("Please type in your Password to access the Network!");
  writer.flush();

  Thread auth = new Thread() {
  int trys  = 0;

  @Override
  public void run() {
    String message;
    boolean goon = true;

    try {
      while (goon) {
        message = reader.readLine();

        if (message.equals("a")) {
          writer.println("Right!");
          writer.flush();
          list_clientWriter.add(writer);

          Thread clientThread = new Thread(new ClientHandler(client));
          clientThread.start();

          goon = false;

          currentThread().interrupt();
        }
        else {
          if (trys >= 2) {
            reader.close();
            writer.close();
            client.close();
            goon = false;
            }
            else {
              int verbleiben = 2 - trys;
              writer.println("Wrong: " + verbleiben + " trys left " + message);
              writer.flush();

              trys++;
            }
          }
        }
      }
      catch (IOException e) {
        e.printStackTrace();
        appendTextToConsole("Identification error", LEVEL_ERROR);
      }
    }
  };

  auth.start();
}
...zum Beitrag

Mit message.contains("a") funktioniert es. Aber warum???

Vielleicht hat das ja jemand studiert und kann mir eine logische Antwort darauf geben.

...zur Antwort