2016-01-17 2 views
1

Я хочу сделать небольшую сетевую игру двух клиентов, отправляющих сообщения друг другу. Я новичок в сокетах и ​​сериализации, но я читал, что отправка сериализованных объектов через сокеты - это способ сделать.Java Сериализация различных объектов

Моя проблема в том, что у меня есть несколько типов сообщений. Один может быть простым сообщением чата, другие один поворот (сообщение), как «NewObjectMessage» или «MoveObjectMessage» ...

В учебниках я всегда что-то вроде

MyClass myClass = (MyClass) objectinputstream.readObject(); 

, который делает литье чтения к одному конкретному классу, который я помещал в поток на другой стороне.

Вопрос: есть ли способ определить, какое сообщение я получаю? Я ищу что-то вроде

stream.peekObject() 

или что-то для того, чтобы увидеть ее тип.

Или обычный способ отправить два сообщения, а первый - это только декларация о том, что будет дальше? Но что происходит, если некоторые пакеты смешиваются, а следующий объект не тот, который я просил?

Так что же лучший способ связи между клиентами способом, например. перемещение объекта и создание объекта (или запись сообщения и т. д.)?

Благодарим за помощь!

+0

Nope. Вам нужен ** протокол **! Например, вы можете сначала отправить строку «String», которая описывает отправленный «объект»? Вы могли бы использовать что-то вроде [STOMP] (https://en.wikipedia.org/wiki/Streaming_Text_Oriented_Messaging_Protocol), в котором есть заголовки, в которые вы можете разместить метаданные ... –

ответ

1

Просто прочитайте объект как объект и используйте instanceof, чтобы узнать, какой тип он есть.

Или все объекты реализуют общий интерфейс с помощью метода действий и просто передаются в интерфейс и вызывают метод.

+0

Будет работать - бит беспорядочный, если существует много разных типов сообщение. –

+0

Хорошо, по крайней мере, я мог бы использовать его, как обычный «локальный» объект? Хорошо, хорошо, по крайней мере, это может сработать. Тем не менее, я не уверен, что это способ сделать ... –

+0

Ну, так как никто, кажется, не знает лучшего решения, за которое я проголосую за него. Большое спасибо! –

0

Я думаю, что вы ищете object.getClass().getName();.

+0

_Everything_ "выбрасывает" NullPointerException' "... –

+0

@BoristheSpider Вы правы. – Gendarme

Смежные вопросы