2011-03-10 53 views
1

我試圖通過iPhone中的點對點網絡發送一些文本。我已經修改了GKTank Sample以使它發送字符串而不是定製的結構數據。以下是我寫的代碼。我的問題是我可以發送@「hello」給另一個ios設備,它可以接收數據(長度爲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

問題是由類型轉換的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]; 
}