2012-03-10 22 views
0

私はどのようにして、あなたがTCPソケット上で配列を送受信できるかを理解しようとしています。私は客観的なCで初心者のビットですが、私は文字列を送受信することができました。私はちょうど今それが配列を行うようにしたい。Obj-Cは、iphone用のtcpソケット経由で配列を送受信します。

(void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent { 

NSLog(@"stream event %i", streamEvent); 

switch (streamEvent) { 

    case NSStreamEventOpenCompleted: 
     NSLog(@"Stream opened"); 
     break; 
    case NSStreamEventHasBytesAvailable: 

     if (theStream == inputStream) { 

      uint8_t buffer[1024]; 
      int len; 

      while ([inputStream hasBytesAvailable]) { 
       len = [inputStream read:buffer maxLength:sizeof(buffer)]; 
       if (len > 0) { 
        output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding]; 

        if (nil != output) { 



         chSent = [output substringWithRange: NSMakeRange (0, 6)]; 

         dimensionString = [output substringWithRange: NSMakeRange (7, 3)]; 
         colorString = [output substringWithRange: NSMakeRange (7, 3)]; 


         if ([chSent isEqualToString:@"dimen:"]) 
         { 

          dimensionInt = [dimensionString intValue]; 

         } 

         if ([chSent isEqualToString:@"color:"]) { 

          // insert array named color in here some how 

         }         


        } 
       } 
      } 
     } 
     break; 


    case NSStreamEventErrorOccurred: 

     NSLog(@"Can not connect to the host!"); 
     break; 

    case NSStreamEventEndEncountered: 

     [theStream close]; 
     [theStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
     // [theStream release]; 
     theStream = nil; 

     break; 
    default: 
     NSLog(@"Unknown event"); 
} 
} 

それは私が持っているものです。私はあなたが助けることができる場合には、事前にそれを

感謝を置くしようとしていますどこ私は//挿入配列を入れている です。

答えて

1

あなたは、いくつかのセパレータで割った文字列として、例えば、整数のため、「色:1; 2; 3; 4;」配列データを送信することができます文字列を分離するだけです。より複雑なデータ構造を渡す必要がある場合は、エンコード、送信、デコードが可能です。そのためのNSKeyedArchiverクラスを見てください。

+0

クールなおかげで、私は、送信者と受信者側からではなく、これがダウンしてトラフィックを維持するためにそれを行うための最善の方法であると私は簡単に行うことができ、文字列では約200の値を送信する必要がありますか? – NickREd

+0

最良の方法は、送信するデータ構造を最適化し、必要なものだけを送信することです。たとえば、短絡だけが必要な場合は整数を送信しないでください。次に、「太い」受信者が必要かどうかを判断する必要があります。たとえば、平均化が必要な場合は、値(ファットレシーバー)、または送信側で計算し、結果を送信します。 – fbernardo

関連する問題