Протокол Google Буферы Objective-C - PullRequest
2 голосов
/ 17 июня 2011

У меня есть следующий метод:

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

   if(s<128){
      NSLog(@"<128");
      NSData *size = [NSData dataWithBytes:&s length:1]; 
      [socket writeData:size withTimeout:TIME_OUT tag:100];
      [socket writeData:d withTimeout:TIME_OUT tag:101];
   } else {
     NSLog(@">= 128");
     NSData *size = [NSData dataWithBytes:&s length:2]; 
     [socket writeData:size withTimeout:TIME_OUT tag:100];
     [socket writeData:d withTimeout:TIME_OUT tag:101];
   }
}

Я знаю, что вышесказанное очень неправильно (просто моя попытка разобраться во всем этом).Я не знаю, как получить NSData *size правильную длину для сообщений размером более 128.Я думаю, что это как-то связано с вариантами

Кто-нибудь знает, как это сделать?как это сводит меня с ума.

Заранее спасибо.

1 Ответ

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

Я хотел бы отметить, что [NSData dataWithBytes:&s length:1] и [NSData dataWithBytes:&s length:2] не делают то, что вы ожидаете.Например, допустим, ваша переменная s равна шестнадцатеричному значению 0xFFCCAA00.Передача длины в один означает, что размер данных будет один байт.При прохождении 1 ваш размер будет равен 0xFFCC (255), а при прохождении 2 ваш размер будет равен 0xFFCC (65484).Вероятно, вам нужно следующее

// >= 128
int length = 2;
NSData *size = [NSData dataWithBytes:&length length:sizeof(length)];

Обновление:

Если вы хотите отправить один байт, попробуйте следующее:

unsigned char length = 1;
// < 128
NSData *size = [NSData dataWithBytes:&length length:sizeof(length)];
// >= 128
length = 2;
NSData *size = [NSData dataWithBytes:&length length:sizeof(length)];
...