0
GKTankの例の構造体にintとCGPointデータを正常に送信しましたが、NSStringを送信しようとしました。私も...ない成功を持つ代わりに、NSStringのの文字でGKTankの例を使用してNSStringを送信する方法
を、それを試してみました。ここ を送信するためのコードです:
NSString *playerName = @"My Name";
NSData *dat = [playerName dataUsingEncoding:NSUTF8StringEncoding];
[BTINconnector sendNetworkPacketwithPacketID:NETWORK_PLAYERNAME withData:dat ofLength:sizeof(dat) reliable:YES];
を(GKTankから知られ、修正された)方法は
- (void)sendNetworkPacketwithPacketID:(int)packetID withData:(void *)data ofLength:(int)length reliable:(BOOL)howtosend {
//NSLog(@"bmpc:ok 3 send packet to %i",gamePeerId);
// the packet we'll send is resued
static unsigned char networkPacket[kMaxPacketSize];
const unsigned int packetHeaderSize = 2 * sizeof(int); // we have two "ints" for our header
if(length < (kMaxPacketSize - packetHeaderSize)) { // our networkPacket buffer size minus the size of the header info
int *pIntData = (int *)&networkPacket[0];
// header info
pIntData[0] = gamePacketNumber++;
pIntData[1] = packetID;
// copy data in after the header
memcpy(&networkPacket[packetHeaderSize], data, length);
NSData *packet = [NSData dataWithBytes: networkPacket length: (length+8)];
if(howtosend == YES) {
[mySession sendData:packet toPeers:[NSArray arrayWithObject:gamePeerId] withDataMode:GKSendDataReliable error:nil];
} else {
[mySession sendData:packet toPeers:[NSArrayarrayWithObject:gamePeerId] withDataMode:GKSendDataUnreliable error:nil];
}
}
}
と受信方法(私が変更したGKタンクから)
- (void)receiveDataDG:(NSData *)data fromPeer:(NSString *)peer inSession:(GKSession *)session context:(void *)context {
static int lastPacketTime = -1;
unsigned char *incomingPacket = (unsigned char *)[data bytes];
int *pIntData = (int *)&incomingPacket[0];
NSData* nData = (NSData*)&incomingPacket[0];
//NSData* bData = nData[8];
//
// developer check the network time and make sure packers are in order
//
int packetTime = pIntData[0];
int packetID = pIntData[1];
if(packetTime < lastPacketTime && packetID != NETWORK_COINTOSS) {
NSLog(@"bmc: EXITED");
return;
}
lastPacketTime = packetTime;
switch(packetID) {
case NETWORK_PLAYERNAME:
{
NSData *hjk = [NSData dataWithBytes:&pIntData[2] length:sizeof(int)];
NSString *gotitb = [[NSString alloc] initWithData:hjk encoding:NSUTF8StringEncoding];
NSLog(@"bmc:str %@,%@",gotitb,gotitb);
…
go titbはnullを返すが、私は理由を知らない。助けてください。
文字列がまだNULLです。 – MarkWayne
同じ問題があります。 NSData * hjk = [NSData dataWithBytes:&pIntData [2] length:sizeof(int)]; sizeof pIntDataにする必要があります – logancautrell
まだ成功していません。 NSLog(@ "%s"、データ)でデータを読むと、<00000000 06000000 abf3b7fb 2b>と表示されます。 3番目のブロックは必要なデータです。 Intは動作していますが、NSStringは – MarkWayne