【发布时间】:2011-04-02 19:18:21
【问题描述】:
好的,我设法在两名玩家之间创建了一场比赛。现在我将做一个关于向玩家发送数据的小测试。
我不太明白关于 NSData 的解释。本质上,它是什么?我如何向其他玩家发送一个不知道的数组?
Apple 提到数据包可能会丢失。但是有一种“可靠”模式可以防止这种情况发生。但我找不到这样的。
有什么想法吗?
【问题讨论】:
标签: iphone ios nsdata gamekit game-center
好的,我设法在两名玩家之间创建了一场比赛。现在我将做一个关于向玩家发送数据的小测试。
我不太明白关于 NSData 的解释。本质上,它是什么?我如何向其他玩家发送一个不知道的数组?
Apple 提到数据包可能会丢失。但是有一种“可靠”模式可以防止这种情况发生。但我找不到这样的。
有什么想法吗?
【问题讨论】:
标签: iphone ios nsdata gamekit game-center
是的,您必须制定自己的 OWN 协议。 “制定协议”是您自己做的事情。类似...基本上在服务器端
// the message arrives and you then do this...
[data getBytes:&getMe length:sizeof(CommsProt)];
而在客户端发送消息,你这样做......
NSData * data = [NSData dataWithBytes:&sendMe length:sizeof(CommsProt)];
// ...now send that data using GameKit or whatever system you end up with
然后你定义你的协议——至少是数据块——像这样:
typedef struct _CommsProt
{
BOOL happyThing;
someThings wotJustHappened;
float happyValue;
float anotherHappyValue;
// etc
}
CommsProt;
这也有帮助...
Most effective way to do networking on Mac/iPhone?
一些有用的注释...
(i) “客户端”和“服务器”表示什么都没有。您将能够向任一方向发送信息包(如上面的“CommsProt”)。如果您想考虑并将其称为服务器端(特别是如果您有集线器型布置),那很好。但这只是在你的脑海中。 (顺便说一下,通常你可能会在每个方向上使用不同的数据结构,这很好。)
(ii) 关于套接字。如果您对网络非常感兴趣,您将不得不处理套接字并编写自己的套接字代码。但是,您很可能可以选择一个网络层,您甚至不必说“套接字”这个词!例如,GameKit + Bonjour 完全为您处理套接字,并且这种组合处理了另一个非常困难的问题,即查找您的客户端/服务器之一.如果您是新手,我建议您暂时完全搁置套接字,并为您的网络层使用诸如 GameKit(或 Windows 上的任何等效系统)之类的系统。
(iii) 实际上,首先只需使用 GameKit 之类的极其简单的东西,同时弄清楚你的协议和所有其他令人头疼的问题。稍后,如有必要,您可以重写网络层,或者,切换到您听说过的其他一些包。幸运的是,上面代码示例之前的所有内容都不会改变,只有网络层会改变。
(iv) 关于 WiFi。 GameKit 和大多数便利包对物理层完全不可知:它们会为您处理。 GK 可以正常工作,但电话已连接——蓝牙、以太网等等!实际上,您“不会知道”正在使用哪个物理层。 (有时你无法控制这很烦人:放手吧,用户不会在意的。)
【讨论】: