2010-06-21 7 views
6
내 응용 프로그램에 간단한 기능을 추가하기 위해 노력하고있어

을 통해 문자열을 보내, 단순히 WiTap 샘플 코드가하는 매우 같은 다른 장치에 미리 서식이 지정된 문자열을 보내야합니다. 내가 단일의 int 대신 문자열을 보내 WiTap을 수정하는 방법 (좋은 자습서아이폰 SDK는 와이파이

모든 포인터가 좋은 것

;. 그것은 할 매우 사소한 일처럼 들리지만, 나는 그것이 동작하지 않습니다?.

SimpleNetworkStreams 샘플을 살펴 봤지만 파일이 아닌 문자열 (NSString, char [], 선호하지 않음)을 보내려는 것으로서 머리 위로 길을 걸었습니다.

이 예는 너무 :. How to add data for NSOutputStream?하지만 완전히

+0

은 그냥 같은 것을 (const를 uint8_t의 *) 통과 해야하는 건가요 [strBuffer UTF8String에] 여기서 strBuffer는 버퍼가 쓸 NSString입니다? – SaltyNuts

답변

4

도움이되지 않았다 난 이후를 파악하고 내 자신의 질문 시간에 대답하기로 결정했습니다 비슷한 상황에 처한 사람들을위한 것입니다. 내가 어떤 문자열을 보낼 때마다

, 내가 만든이 도우미 함수 사용 : 수신 측에

- (void) send:(NSString *)string { 
    const uint8_t *message = (const uint8_t *)[string UTF8String]; 
    if (_outStream && [_outStream hasSpaceAvailable]) 
     if([_outStream write:message maxLength:strlen((char *)message)] == -1) 
      NSLog(@"Failed sending data to peer"); 
} 

그것은 다음과 같습니다

- (void) stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode { 

    switch(eventCode) { 

    case NSStreamEventHasBytesAvailable: 
    { 
     if (stream == _inStream) { 
      // read it in 
      unsigned int len = 0; 
      len = [_inStream read:buf maxLength:buffSize]; 
      buf[len] = '\0'; 
      if(!len) { 
       if ([stream streamStatus] != NSStreamStatusAtEnd) 
         NSLog(@"Failed reading data from peer"); 
      } else { 
       NSString *message = [NSString stringWithUTF8String:(char *)buf]; 
       // here you do whatever you need with your received NSString *message 
      } 
     } 
    } 
} 

버퍼는 다음과 같이 정의된다 :

#define buffSize 60000 
uint8_t buf[buffSize]; 

60,000은 상당히 임의적이므로 필요에 맞게 변경할 수 있습니다.

위의 내용에 대한 몇 가지주의 사항. 이 문자열에 대한 버퍼를 상당히 크게 만드는 것이 안전하지만 한 번에 문자열을받을 수있는 것은 결코 보장 할 수 없습니다. 실제 응용 프로그램에서는 전체 문자열을 받았는지 확인하고 필요한 경우 후속 NSStreamEvent 동안받은 문자열을 결합하는 데 의존 할 수있는 특정 프로토콜을 신중하게 설계해야합니다.

관련 문제