Frage

Ich habe einen Thread, der für Bestätigungen von Nachrichten abhören soll und verarbeiten sie, aber es scheint, dass der Faden nie die Bestätigungen ist reciving.

Hier ist der entsprechende Code im Thread:

private class TcpReader extends Thread {

    BufferedReader reader;
    boolean running = false;
    public TcpReader(BufferedReader reader)
    {
        this.reader = reader;
    }

    public void run() {
        running = true;

        while (running) {
            try {
                String line = reader.readLine();
                logger.debug("TCP READER RECIEVED MESSAGE ["+ line + "]");
                // Do stuff
            } catch (Exception e) {
            }
        }
    }
}

Der Faden wird im folgenden Code erzeugt, die in einer anderen Klasse geschieht:

sock = new Socket(hostName, port);
out = new PrintWriter(sock.getOutputStream(), true);
isConnected = true;
BufferedReader reader =
        new BufferedReader(new InputStreamReader(sock.getInputStream()));
tcpReader = new TcpReader(reader);
tcpReader.start();

Die Variablen werden instanziiert in der als Elementvariablen:

Socket sock;
PrintWriter out;
BufferedReader in;

Der Ablauf der Ausführung ist meine Serverklasse recives eine Nachricht und antwortet dann mit einem ACK, dass der Kunde soll auf abholen. Da jedoch der Client für den ack nicht zu warten, ist ein separaten Thread wartet für alle Antworten fortzusetzen.

Der Readline- Code nie liest nichts.

Die Nachrichten von meinem Server gesendet werden, und sie haben „\ r \ n“, wie die letzten beiden Zeichen.

War es hilfreich?

Lösung

Ist das End-of-Line-Zeichen vom Server übertragen werden, das heißt es den Ausgangsstrom am anderen Ende Spülung? Sie könnten telnet oder einen einfachen Paket-Sniffer verwenden zu überprüfen, was gesendet werden wird.

Auf einer Seite zur Kenntnis, running sollte wohl als flüchtig markiert werden.

Andere Tipps

Wenn ein Exception von readLine angehoben wird, nichts angemeldet ist.

Es gibt nicht genügend Informationen. Bei einer Vermutung sind Spülen Sie nicht die Ausgangspuffer.

Beachten Sie auch, haben Sie nicht angegeben Zeichencodierung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top