2

我正在使用cocoaasyncsocket將數據Google Protocol Buffers(使用http://code.google.com/p/metasyntactic/wiki/ProtocolBuffers)發送到Java服務器。這一切都很好,但對於消息(protoToSend)> 128bytes我遇到了問題,因爲Java服務器無法正確讀取消息長度,我認爲是因爲我從目標C發送了錯誤的長度。發送數據如下:cocoaasyncsocket發送數據> 128bytes(google協議緩衝區)

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

長度是小端varint編碼,想必 - 這意味着它是與MSB的7位數據塊作爲一個擴展位。如果設置了MSB,則需要處理下一個字節(依此類推)以獲得組合長度,然後使用按位移組合它們。

事實上,對於所有數字< 128,這確實看起來與讀取單個字節相同。

See here for the spec解碼base-128 varints。

+0

嗨,感謝您的快速響應。 是的,我明白你的意思,我想我需要使用CodedOutputStream將我的大小(int)轉換爲varint。 – robert