도움이되지 않았다 난 이후를 파악하고 내 자신의 질문 시간에 대답하기로 결정했습니다 비슷한 상황에 처한 사람들을위한 것입니다. 내가 어떤 문자열을 보낼 때마다
, 내가 만든이 도우미 함수 사용 : 수신 측에
- (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
동안받은 문자열을 결합하는 데 의존 할 수있는 특정 프로토콜을 신중하게 설계해야합니다.
은 그냥 같은 것을 (const를 uint8_t의 *) 통과 해야하는 건가요 [strBuffer UTF8String에] 여기서 strBuffer는 버퍼가 쓸 NSString입니다? – SaltyNuts