我为移动定义了一个结构
typedef struct {
MsgType msgType;
int newFallenStonesSize;
char *newFallenStones;
} MsgMove;
并发送如下数据:
MsgMove message;
message.msgType = MsgTypeMove;
message.newFallenStones = (char *)malloc(nrNewFallenStones*sizeof(char));
for (int i=0; i<nrNewFallenStones; i++) {
message.newFallenStones[i]=newFallenStones[i];
}
message.newFallenStonesSize = nrNewFallenStones;
NSData *data = [NSData dataWithBytes:&message length:(2*sizeof(int)+message.newFallenStonesSize*sizeof(char))];
[[KKGameKitHelper sharedGameKitHelper] sendDataToAllPlayers:data reliable:YES];
数据在发送时是正确的,但是当我收到这样的数据时:
else if (msg->msgType == MsgTypeMove)
{
MsgMove *msgMove = (MsgMove *) [data bytes];
for (int i=0; i<msgMove->newFallenStonesSize; i++) {
NSLog(@"New Stone received:%i",msgMove->newFallenStones[i]);
}
}
值已更改。例如1、6、3,而我收到76、105 98。
有人知道为什么会这样吗?
最佳答案
主要问题是您正在通过网络发送指向数据的指针,而不是实际数据。当您为message.newFallenStones
分配空间时,它将被设置为内存中与您的MsgMove
结构不相邻的某些随机位置。然后,将数据写入该其他存储位置。您打包传输的是MsgMove结构(带有指向内存中其他位置的指针)以及随便出现在内存中的随机字节。
处理此问题的典型方法是将您的整个消息一起分配,并将数据写入其末尾。更像:
typedef struct {
MsgType msgType;
int newFallenStonesSize;
char newFallenStones; // The first newFallenStones value
} MsgMove;
然后发送
MsgMove *message;
message = (MsgMove *)malloc(sizeof(MsgMove)+nrNewFallenStones-1);
message->msgType = MsgTypeMove;
message->newFallenStonesSize = nrNewFallenStones;
char *newStones = &MsgMove->newFallenStones;
for (int i=0; i<nrNewFallenStones; i++) {
newStones[i]=newFallenStones[i];
}
NSData *data = [NSData dataWithBytes:message length:(sizeof(MsgMove)+nrNewFallenStones-1)];
[[KKGameKitHelper sharedGameKitHelper] sendDataToAllPlayers:data reliable:YES];
关于iphone - 发送动态数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11396627/