Сокет: не может читать из BufferedReader и / или писать в PrintWriter при определенных условиях - PullRequest
0 голосов
/ 23 октября 2011

Добрый день всем!

Я пытаюсь создать приложение для обмена сообщениями, но не могу найти решение большой проблемы. Точно, есть две большие проблемы.

Вот код:

@Override
public void run() {
    String incoming;
    try {
        while (true) {
            if (!connected)
                break;
            // READING
            if (reader.ready() && (incoming = reader.readLine()) != null) {
                notifier.putCommand(incoming, this);
                incoming = null;
            }

            // WRITING
            synchronized (messagges) {
                for (String message : messagges) {
                    System.out.println("SENDING MESSAGE TO CLIENT: " + message);
                    writer.println(message);
                }
                messagges.clear();
            }
            writer.println("b");
        }
    } catch (IOException e) {
        MyLogger.log(e);
    }
}

Проблемы:

  1. Если я не каждый раз пишу ненужный текст клиенту (writer.println("b")) Я не могу прочитать ни одно сообщение в BufferedReader, отправленное с него. Как это возможно?!

  2. На стороне клиента я вижу только много "b", но все, что отправлено внутри оператора для (writer.println(message)). Это действительно странно, потому что когда я печатаю на сервере ОТПРАВКА СООБЩЕНИЯ КЛИЕНТУ: [...] Я вижу это в консоли, но затем сообщение не отправляется.

В чем может быть проблема?

1 Ответ

1 голос
/ 23 октября 2011

Вам необходимо прочитать о том, как работает буферизация, и, в частности, научиться использовать метод flush(), чтобы дать указание буферизованному записывающему устройству фактически отправлять данные.

...