Я использую Socket для связи с ServerSocket. Строки отправляются с сервера на мой Socket. Каждая отдельная строка представляет собой сообщение, которое при анализе содержит информацию. Чтобы прочитать эти строки текста, используется сканер.
Проблема в том, что данные поступают «скачками». Хотя Сервер отправляет данные непрерывно и равномерно, данные, считанные Сканером на стороне клиента, кажется, приостанавливаются, читаются сразу в группе сообщений (30-40), а затем снова приостанавливаются. Этот цикл повторяется бесконечно.
Если я увеличиваю скорость, с которой отправляются данные, длительность пауз уменьшается; если я замедляю передачу данных (до 1 сообщения в секунду), ошибка сохраняется, и паузы становятся очень длинными. Это почти как если бы Socket ожидает переполнения своего буфера, прежде чем отправить какие-либо данные в Сканер; затем все смывает и снова ждет переполнения. Однако, если я уменьшу размер буфера Socket, ничего не изменится.
Следует отметить, что я использовал Scanner и Socket в этом методе раньше - со стороны сервера - и все работало, как нужно. Кроме того, я а) попробовал это с помощью BufferedReader, такого как Java Tutorials (без изменений в ошибке) и б) распечатал список передач сервера в файл и прочитал из файла таким же образом, и программа работала, как ожидалось (постоянная скорость приема сообщений и т. д.), так что проблема, похоже, в самом Socket.
Итак: Как исправить такое поведение? У меня нет идей, и я действительно не знаю, что происходит.
КОД (по запросу):
// In try block
// Makes the connection
Socket connection = new Socket(TARGET_MACHINE, PORT_NUMBER);
Scanner reader = new Scanner(connection.getInputStream());
// In new Thread
// In run()
while(!finished) // Boolean exit strategy
{
if(reader.hasNextLine())
Sring message = reader.nextLine();
}
Вот как я подключаю и извлекаю строки.
Кроме того, строки, которые я получаю обычно имеют длину 20-40 символов.