Cocoaasyncsocket отправка данных> 128 байтов (буферы протокола Google) - PullRequest
2 голосов
/ 14 июля 2011

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

1 голос
/ 14 июля 2011

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

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

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

...