Внедрить протокол для клиента Java (Android) и сервера C # - PullRequest
1 голос
/ 30 мая 2011

Я реализовал в Android небольшое приложение, которое отправляет через сервер строки подключения сокетов (C #).

Пока я только кодирую строки, которые отправляю (проблемы безопасности), но теперь мне нужнореализовать протокол, чтобы иметь другие функции в моем приложении, такие как сообщение «keep alive», среди прочего.

Мы уже определили procotol, он имеет заголовок (последовательность байтов) и данные (строк, которые я отправлял ранее), но, поскольку я не знаком с этим, я не знаю, как начать реализацию протокола на Java (клиенте).

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

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

Спасибо за ваше время.

РЕДАКТИРОВАТЬ

Завершено использованием буферов протокола для реализации этого:

http://code.google.com/p/protobuf-net/ - для стороны сервера c #

http://code.google.com/p/protobuf-javame/ - для стороны Android

1 Ответ

1 голос
/ 08 июня 2011

Я столкнулся с той же проблемой некоторое время назад.Если у вас достаточно пропускной способности, я предлагаю вам использовать потоки XML и XML, эти две технологии очень хорошо подходят для всех платформ и всех языков.Однако, если вам не хватает пропускной способности, то да, вы можете перейти на двоичный код.Вот дизайн, который я обычно использую:

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

Надеюсь, это поможет,

С уважением,

...