Cocoaasyncsocket отправка данных>128 байтов (буферы протокола Google)

Я использую cocoaasyncsocket для отправки данных буферов протокола Google (используя http://code.google.com/p/metasyntactic/wiki/ProtocolBuffers) на сервер Java. Это все нормально, НО для сообщений (protoToSend) >128 байт. Я сталкиваюсь с проблемами, поскольку сервер Java не может правильно прочитать длину сообщения, я думаю, потому что я посылаю неправильную длину из Objective C.

В настоящее время я отправляю данные следующим образом:

AsyncSocket *socket;


- (void)sendProtoToServer:(RequestMessage *)protoToSend {
     NSData *d = [protoToSend data];
     int s = [protoToSend serializedSize];

     NSData *size = [NSData dataWithBytes:&s length:1];
     [socket writeData:size withTimeout:TIME_OUT tag:100];
     [socket writeData:d withTimeout:TIME_OUT tag:101];
}

Есть идеи?

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

1 ответ

Решение

Предполагается, что длина закодирована в формате с прямым порядком байтов - это означает, что она состоит из 7-битовых фрагментов с MSB в качестве бита продолжения. Если MSB установлен, то вам нужно обработать следующий байт (и т. Д.), Чтобы получить объединенную длину, а затем использовать побитовое смещение для их объединения.

Действительно, для всех чисел < 128 это действительно выглядит идентично чтению одного байта.

Смотрите здесь для спецификации по декодированию base-128 varints.

Другие вопросы по тегам