2011-03-10 1 views
1

iPhone에서 피어 투 피어 네트워킹을 통해 텍스트를 보내려고합니다. GKTank 샘플을 약간 수정하여 사용자 정의 된 구조체 데이터 대신 문자열을 전송하도록했습니다. 다음은 작성한 코드입니다. 내 문제는 다른 ios 장치에 "hello"를 보낼 수 있고 데이터 (길이 5)를받을 수 있지만 수신 한 NSData를 NSString으로 변환 할 수 없으므로 수신 된 데이터를 문자열로 표시 할 수 없기 때문입니다. 코드의 문제점에 대한 아이디어가 있습니까?iPhone에서 피어 투 피어 네트워킹을 통해 텍스트를 전송하는 것에 관한 문제

- (void)receiveData:(NSData *)data fromPeer:(NSString *)peer inSession:(GKSession *)session context:(void *)context 
{ 
    NSString *recvStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
    textField.text = recvStr; 
    [recvStr release]; 
} 

- (void)sendNetworkPacket:(GKSession *)session packetID:(int)packetID withData:(void *)data ofLength:(int)length reliable:(BOOL)howtosend 
{ 
    NSData *packet = [NSData dataWithBytes:data length:length]; 
    NSError *error = nil; 
    if(howtosend == YES) { 
     [session sendData:packet toPeers:[NSArray arrayWithObject:gamePeerId] withDataMode:GKSendDataReliable error:&error]; 
    } else { 
     [session sendData:packet toPeers:[NSArray arrayWithObject:gamePeerId] withDataMode:GKSendDataUnreliable error:&error]; 
    } 
    if (!error) { 
     NSLog(@"Did send data"); 
    } else { 
     NSLog(@"Send data failed: %@", [error localizedDescription]); 
    } 

} 

- (IBAction)sendText:(id)sender 
{ 
    if (self.gameSession && textField.text.length) { 
     NSData *data = [textField.text dataUsingEncoding:NSUTF8StringEncoding]; 
     [self sendNetworkPacket:gameSession packetID:0 withData:data ofLength:[data length] reliable:NO]; 
    } 
} 

답변

0

문제는 * 숯불과 CString을에서있는 NSString를 얻을 수 -stringWithCString:encoding:를 사용하는 타입 캐스팅을 NSData *에 의해 해결된다.

- (void)receiveData:(NSData *)data fromPeer:(NSString *)peer inSession:(GKSession *)session context:(void *)context 
{ 
    unsigned char *incomingPacket = (unsigned char *)[data bytes]; 
    textField.text = [NSString stringWithCString:(const char *)incomingPacket encoding:NSUTF8StringEncoding]; 
} 
관련 문제