Я использую Socket для связи с ServerSocket.Строки отправляются с сервера на мой сокет.Каждая отдельная строка представляет собой сообщение, которое при разборе содержит информацию.Для чтения этих строк текста используется сканер.
Проблема в том, что данные поступают "рывками".Несмотря на то, что Сервер отправляет данные непрерывно и равномерно, данные, считываемые Сканером на стороне клиента, кажется, приостанавливаются, считывают сразу несколько сообщений (30-40), а затем снова делают паузу.Этот цикл повторяется бесконечно.
Если я увеличу скорость, с которой отправляются данные, продолжительность пауз уменьшается;если я замедляю данные (до 1 сообщения в секунду), ошибка сохраняется и паузы становятся очень длинными.Это почти так, как будто Socket ожидает переполнения буфера, прежде чем отправлять какие-либо данные в сканер;затем сбрасывает все и снова ждет переполнения.Однако, если я уменьшу размер буфера Socket, ничего не изменится вообще.
Следует отметить, что я использовал Scanner и Socket в этом методе раньше - со стороны сервера - и все работало как нужно,Кроме того, я а) попробовал это с BufferedReader, таким как Java Tutorials (без изменений в ошибке) и б) напечатал список передач Сервера в файл, и прочитал из файла таким же образом, и программа работала, как ожидалось(постоянная скорость приема сообщений и т. д.), поэтому проблема, по-видимому, заключается в самом сокете.
Итак: Как мне исправить это поведение?У меня нет идей, и я действительно не знаю, что происходит.
КОД (По запросу):
// 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 символов.