public void run() {
    while (!isInterrupted()) {
      // hier wird die Zieladresse (target) aus der Nachricht extrahiert
      try {
        String message = receive();
        // System.out.println("ServerThread "+myNumber+":"+" "+message);

        if (message != null) {
          StringTokenizer ST = new StringTokenizer(message);
          int target = Integer.parseInt(ST.nextToken());
          System.out.println("sending message from " + myNumber + " to " + target);
          // falls target="-1": Nachricht an Server; sonst Nachricht an Spieler x
          if (target >= -1) {
            server.forward(gameID, message);
          } else {
            send("1exit");
            server.deletePlayer(message + " " + gameID);
            interrupt();

            try {
              connection.close();
            } catch (IOException ex) {
            }

          }

        } else {
          String log = "Aborting game! Player " + (myNumber + 1) + " has left the game\n";
          System.out.print(log);
          server.log(log, server.getPort());
          interrupt();
          server.shutdown(nameOfTheGame + " " + myNumber + " " + gameID, log);
        }
      } catch (InterruptedIOException e) {
        String log = "Aborting game! TimeOut while receiving message" + " from player " + (myNumber + 1) + "\n";
        System.out.print(log);
        server.log(log, server.getPort());
        interrupt();
        server.shutdown(nameOfTheGame + " " + myNumber + " " + gameID, log);
      } catch (IOException e) {
        String log = "Aborting game! Player " + (myNumber + 1) + " has left the game\n";
        System.out.print(log);
        server.log(log, server.getPort());
        interrupt();
        server.shutdown(nameOfTheGame + " " + myNumber + " " + gameID, log);
      }
    }
  }