iPhone中通过点对点网络发送文本的问题

iPhone中通过点对点网络发送文本的问题,iphone,networking,peer,Iphone,Networking,Peer,我正在尝试通过iPhone中的点对点网络发送一些文本。我对GKTank示例进行了一些修改,使其发送字符串,而不是自定义结构数据。下面是我编写的代码。我的问题是,我可以向另一个ios设备发送@“hello”,它可以接收数据(长度5),但它接收到的NSData无法转换为NSString,因此接收到的数据不能显示为字符串。你知道代码出了什么问题吗 - (void)receiveData:(NSData *)data fromPeer:(NSString *)peer inSession:(GKSess

我正在尝试通过iPhone中的点对点网络发送一些文本。我对GKTank示例进行了一些修改,使其发送字符串,而不是自定义结构数据。下面是我编写的代码。我的问题是,我可以向另一个ios设备发送@“hello”,它可以接收数据(长度5),但它接收到的NSData无法转换为NSString,因此接收到的数据不能显示为字符串。你知道代码出了什么问题吗

- (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];
    }
}

通过将NSData*类型转换为char*并使用
-stringWithCString:encoding:
从CString获取NSString,可以解决此问题

- (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];
}