проблема чтения сокетов в многопоточном приложении JAVA - PullRequest
0 голосов
/ 16 мая 2011

Мы создали сокет в многопоточном приложении JAVA в Windows, которое должно считывать данные в последовательной форме. Но мы сталкиваемся с проблемой при чтении данных из входного потока

Например, порядок данных

1-100 (1,2,3,4,...100)
101-200
201-200
and so on..

Мы можем читать от 1 до 100 надлежащим образом, но не можем прочитать следующий набор данных, то есть 101-200. Но может правильно читать дальнейший набор данных.

Данные поступают с нашей стороны должным образом (как видно из эфирного журнала), но поток не может их прочитать.

Вот фрагмент кода

socket.getInputStream.read(buffer);
Сокет

относится к классу Socket.

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

Ответы [ 3 ]

0 голосов
/ 17 мая 2011

Вот фрагмент кода

> socket.getInputStream.read(buffer);

Нет, это не так.Этот фрагмент не компилируется.И правильный фрагмент тривиально очевиден.

Единственными способами, которые могут пропустить данные, являются (i) если другой поток читает сокет в то же время, или (ii) если вы используете BufferedInputStream или BufferedReader в одномвремя, а не в другое.

0 голосов
/ 18 мая 2011

Спасибо за ваши комментарии. Проблема была с многопоточностью синхронизации, я обработал то же самое, и он работал нормально.

0 голосов
/ 16 мая 2011

Вы упоминаете, что это многопоточное приложение, поэтому, не видя вашего кода, мои подозрения будут лежать в другом потоке, возможно манипулирующем вашим Socket или InputStream. Проблемы с потоками могут быть невероятно трудными для обнаружения и отладки.

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