#java #client-server #protocols
#java #клиент-сервер #протоколы
Вопрос:
Я реализовал на Android небольшое приложение, которое отправляет через сокет строки подключения к серверу (C #).
На данный момент я кодирую только отправляемые строки (проблемы с безопасностью), но теперь мне нужно реализовать протокол, чтобы в моем приложении были другие функции, такие как сообщение «keep alive» и другие.
Procotol уже был определен нами, у него есть заголовок (последовательность байтов) и данные (строки, которые я отправил ранее ), но поскольку я не знаком с этим, я не знаю, как начать реализацию протокола на Java (клиенте).
Не могли бы вы указать несколько примеров простой реализации протоколов? Мне нужно прочитать байты, чтобы я мог решить, какой тип действия клиент запрашивает у сервера, и наоборот тоже.
Моей первой попыткой было бы создать один класс для каждого типа сообщения и заполнить байты так, как мне нужно, в итоге каждое сообщение представляло бы собой массив байтов. Но я не хочу начинать копаться в этом, пока не буду уверен, что это правильный путь.
Спасибо, что уделили мне время.
Редактировать
Завершено использование буферов протокола для реализации этого:
http://code.google.com/p/protobuf-net — для серверной части c #
http://code.google.com/p/protobuf-javame — для стороны Android
Ответ №1:
Некоторое время назад я столкнулся с такой же проблемой. Если у вас достаточно пропускной способности, я предлагаю вам использовать XML и XML streams, эти две технологии очень хорошо подходят для всех платформ и всех языков. Однако, если вам не хватает пропускной способности, то да, вы можете перейти на двоичный файл. Вот дизайн, который я обычно использую:
class AbstractMessage{
byte[] data;
void GenerateHeader(){
// this method generates the message header
}
// Use this method to translate your
// business domain message into a byte array that will go through the network
void abstract byte[] ToByteArray(AbstractMessage);
// Translate received data from network to a business domain message
void abstract AbstractMessage ParseMessage(byte[] receivedData)
}
// And then you can have your messages
class MyMessage extends AbstractMessage{
// In this subclass, you can define how a
// MyMessage object is translated into a byte array
// and vice versa (using ToByteArray and ParseMessage methods)
}
Я надеюсь, что это поможет,
С уважением,