2

私はcocoaasyncsocketを使用して、Googleプロトコルバッファ(http://code.google.com/p/metasyntactic/wiki/ProtocolBuffersを使用)をJavaサーバーに送信しています。これはすべて問題ありませんが、メッセージ(protoToSend)> 128bytesの場合Javaサーバがメッセージの長さを正しく読み取れないため、問題に遭遇しています。Objective Cから間違った長さを送信していると思います。データを送信するcocoaasyncsocket> 128バイト(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の場合、これは実際には1バイトの読み取りと同じに見えます。

See here for the specデコードベース128のバリント。

+0

こんにちは、高速応答ありがとう。 ええ、私はあなたが意味するものを参照してください、私はvarintに私のサイズ(int)を変換するためにCodedOutputStreamを使用する必要があると思う。 – robert

関連する問題