Реализовать протокол для клиента Java (Android) и сервера C #

#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)
}
  

Я надеюсь, что это поможет,

С уважением,