Отправка и получение сериализованных объектов в Java - Socket Programming - PullRequest
2 голосов
/ 21 сентября 2011

(я знаю, что это можно сделать в RMI, но мне нужно сделать это с помощью сокетов, поскольку я обнаружил, что при использовании методов RMI может быть какой-то процесс установки)

Пожалуйста, посмотрите на простой код клиент-сервер на http://www.coderanch.com/t/205325/sockets/java/send-any-java-Object-through

В этой программе два объекта порядка, отправленных SimpleServer, известны SimpleClient.

т. Е. Сервер

oos.writeObject(new testobject(1,"object from client")); oos.writeObject(new String("another object from the client"));

Клиент выполняет приведение в соответствии с порядком получения объекта. Но я хочу избежать этой природы и заставить клиента отправлять любой объект в любое время, чтобы сервер также мог обрабатывать каждый отправленный объект соответствующим образом и возвращать результат.

testobject to = (testobject)ois.readObject(); 
System.out.println(to.id);}  
System.out.println((String)ois.readObject());

Есть ли способ «пометить» отправляемые объекты, чтобы действие можно было определить с помощью простого оператора «if» на сервере?

ИЛИ

есть ли лучший способ использовать ResultSet , возвращаемый сервером вместо моего подхода к сериализации объектов?

заранее спасибо.

Спасибо

1 Ответ

2 голосов
/ 21 сентября 2011

readObject вернет объект в своем собственном классе.если вам нужна какая-то логика ветвления, основанная на этом, вы можете использовать instanceof:

Object newObj = stream.readObject();
if (newObj instanceof testobject) {
     doSomething((testobject) newObj);
} else if (newObj instanceof String) {
     doSomethingWithString((String) newObj);
} // etc.

Как правило, это не рекомендуется для всех объектов, считываемых из потока.Если вы собираетесь использовать ObjectStreams для установления протокола, вам следует документировать его и придерживаться его.Таким образом, если одна сторона отправляет неверные данные, вы перехватите их быстрее с другой.

Однако в сценарии, когда в данной точке потока протокола это ожидается что клиент может отправлять один из нескольких типов объектов, тогда это может иметь смысл.

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