2010-01-21 2 views
4

NSInputStream에 문제가 있습니다. 여기 내 코드는 다음과 같습니다.실제 iPhone의 NSInputStream에 문제가 있습니다.

case NSStreamEventHasBytesAvailable: 

     printf("BYTE AVAILABLE\n"); 

     int len = 0; 
     NSMutableData *data = [[NSMutableData alloc] init]; 

     uint8_t buffer[32768]; 

     if(stream == iStream) 
     {  
      printf("Receiving...\n");      

      len = [iStream read:buffer maxLength:32768];     

      [data appendBytes:buffer length:len];     

     } 
     [iStream close]; 

나는 작은 데이터를 읽으려고 노력하며 시뮬레이터와 실제 iPhone에서 완벽하게 작동합니다. 대용량 데이터 (4kB 또는 5kB 이상)를 읽으 려하면 실제 iPhone에서 2736 바이트를 읽고 멈출 수 있습니다.

왜 그렇습니까? PLZ 도와주세요! Merci d' avance!

답변

0

매번 새로운 data 개체를 만드는 것처럼 보입니다 ... &을 속성으로 유지하고 위와 같이 추가해야합니다.

2

데이터 개체가 스트림 처리기 외부에 있어야합니다. 많은 양의 데이터가 들어 오면 한 번에 전체 데이터가 아닌 여러 개의 데이터가 수집되는 경우가 종종 있습니다. bytesRead == 0을받을 때까지 데이터를 계속 추가하십시오. 그런 다음 스트림을 닫고 데이터를 사용할 수 있습니다.

case NSStreamEventHasBytesAvailable: { 
     NSInteger  bytesRead; 
     uint8_t   buffer[32768]; 

     // Pull some data off the network. 

     bytesRead = [self._networkStream read:buffer maxLength:sizeof(buffer)]; 

     if (bytesRead == -1) { 
      [self _stopReceiveWithFailure]; 
     } else if (bytesRead == 0) { 
      [self _stopReceiveWithSuccess]; 
     } else { 
      [data appendBytes:buffer length:len];     
     } 
관련 문제