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.