2014-01-26 5 views
0

Мне нужно создать протокол для клиент-серверного чата на Java. Я использую xml для кодирования сообщений между ними, но я не могу решить, как вернуть декодированные данные на сервер.Разработка протокола чата клиент-сервер Java

Первый раз, я создал много объектов implements IAction (например, Auth объект представляет собой пакет, о новом пользователе в чате), которые различаются в зависимости от их содержимого. Таким образом, когда сервер получает сокет, он называет мой public IAction decode(String s), а затем, сервер должен определить, какой объект он:

if (myIAction instanceof Auth) { 
    server.doMagicAuth((Auth) myIAction); 
} 

но это выглядело некрасиво меня сог из типажей и многие ИФЕС

Другой подход должен был создать один общий объект, называемый Packet, который может содержать intValue, floatValue, stringValue и т. д. А также у него был флаг, в котором говорилось о том, какой именно пакет. Но это была худшая идея coz коллизий. Например, как отправить 2 int, это этот пакет? например пароль и users_id?

И последняя идея состояла в том, чтобы наблюдать за сервером. У сервера должно быть много перегруженных методов public void action(IAction a) (action(Auth a) ... и т. Д.), А протокол должен уведомлять сервер в зависимости от того, какой именно пакет он есть.

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

ответ

1

Клиент-серверное приложение чата обычно не отправляет/принимает 2 типа или 3 поплавки или что-то в этом роде, а просто строки. В эти дни я бы, вероятно, либо отправил объекты JSON, сериализованные как строки, либо просто строки.

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

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<message text="Hello"/> 

Когда посылается от любого клиента, вы берете его на стороне сервера,
получить значение text и отправить его с сервера для всех подключенных клиентов.
Это все, что они хотят от вас, я верю.

+0

XML - это ограничение моей лаборатории = ( И вопрос был в другом: как передавать декодированные данные на сервер из протокола – ovnia

+0

Эти декодированные данные - это не что иное, как строка. Просто отправьте его на свой сервер так, как вам нравится Вызов метода, отправка события, почти все будет работать здесь: –

+0

и еще раз, я не спрашиваю, как представлять мои данные в пакетах), это работа протокола. Я не могу решить, как представить декодированные данные на сервер. например 'Protocol' декодирует строку xml и понимает, что это пакет с новым сообщением от пользователя user123' user21', поэтому мне нужно попросить сервер отправить сообщение пользователю 'user21'. И вопрос «как попросить сервер сделать это?» на самом деле то, что я хотел знать) – ovnia

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