クライアント (iPhone) をサーバーに接続する必要があるプロジェクトを開発しています。CFStream、NSStreamなどを使用してこれを行いました。サーバーは、クライアントで「1つずつ」処理する必要があるデータパケットを送信します。問題は、サーバーが 2 つのデータ パケットを次々に送信することがあるため、クライアントで ([inputStream hasBytesAvailable] を介して) 受信したものが両方のデータ パケットの連結であることです。
サーバーからクライアントへのデータ パケットのアーキテクチャは、"data"+b'00000000' (バイナリ NULL) です。「00000000」バイトがある場合、そのパケットを処理してバッファを空にする必要があることをプログラムに知らせる方法を知りたいです。
私が使用しているコードは次のとおりです。
case NSStreamEventHasBytesAvailable:
if (theStream == inputStream) {
uint8_t buffer[1024];
int len;
while ([inputStream hasBytesAvailable]) {
len = [inputStream read:buffer maxLength:sizeof(buffer)];
if (len > 0) {
NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding];
if (nil != output) {
[self processData:output];
NSLog(@"OUTPUT: %@", output);
}
}
}
}
break;
例。サーバーは次を送信します: msg1_whatever (連結) b'0000000' そしてその直後に、次を送信します: msg2_whatever + b'00000000'
次に、NSLog に次のように表示されます。
2 つの分離された文字列の代わりに。msg1 と msg2 の送信の間に少し時間があれば、問題なく機能しますが、この例外は数回発生するため、処理する必要があります。