Если вы отправляете несколько объектов, часто проще всего поместить их в какой-нибудь держатель / коллекцию, например Object[]
или List
. Это избавляет вас от необходимости явно проверять конец потока и обеспечивает явную передачу количества объектов в потоке.
РЕДАКТИРОВАТЬ: Теперь, когда я отформатировал код, я вижу, что у вас уже есть сообщения в массиве. Просто запишите массив в поток объекта и прочитайте массив на стороне сервера.
Ваш "метод чтения с сервера" читает только один объект. Если он вызывается несколько раз, вы получите ошибку, так как он пытается открыть несколько потоков объектов из одного входного потока. Это не будет работать, так как все объекты были записаны в один и тот же поток объектов на стороне клиента, поэтому вы должны отразить это расположение на стороне сервера. То есть используйте один входной поток объектов и считайте из него несколько объектов.
(Ошибка, которую вы получаете, заключается в том, что objectOutputStream записывает заголовок, который ожидает objectIutputStream. Поскольку вы пишете не несколько потоков, а просто несколько объектов, то следующий объектInInStStream, созданный на входе сокета, не сможет найти второй заголовок и выдает исключение.)
Чтобы исправить это, создайте objectInputStream, когда вы принимаете соединение с сокетом. Передайте этот objectInputStream вашему методу чтения сервера и прочитайте Object из этого.