Почему этот буферизованный ридер не получает никаких данных? - PullRequest
1 голос
/ 29 апреля 2009

У меня есть поток, который должен прослушивать подтверждения сообщений и обрабатывать их, но кажется, что поток никогда не получает подтверждения.

Вот соответствующий код в теме:

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) {
            }
        }
    }
}

Поток создан в следующем коде, который происходит в другом классе:

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();

Переменные создаются в переменных-членах as:

Socket sock;
PrintWriter out;
BufferedReader in;

Поток выполнения - мой серверный класс получает сообщение и затем отвечает ACK, который должен получить клиент. Однако, так как клиент не должен ждать продолжения подтверждения, отдельный поток ожидает всех ответов.

Код readline никогда ничего не читает.

Сообщения отправляются с моего сервера, и у них есть "\ r \ n" в качестве последних двух символов.

Ответы [ 3 ]

3 голосов
/ 29 апреля 2009

Передается ли символ конца строки с сервера, т. Е. Очищает ли поток вывода на другом конце? Вы можете использовать telnet или простой анализатор пакетов, чтобы проверить, что отправляется.

На боковой ноте running, вероятно, следует пометить как изменчивый.

2 голосов
/ 29 апреля 2009

Если значение Exception увеличено на readLine, ничего не регистрируется.

0 голосов
/ 29 апреля 2009

Недостаточно информации. По-видимому, вы не очищаете выходные буферы.

Обратите внимание, что вы не указали кодировку символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...