gpt4 book ai didi

iphone - GameKit:向其他玩家发送可靠的 NSData?

转载 作者:行者123 更新时间:2023-11-28 23:17:31 25 4
gpt4 key购买 nike

好的,我成功地在两个玩家之间创建了一场比赛。现在我将做一个关于向播放器发送数据的小测试。

我不太明白关于 NSData 的解释。本质上,它是什么?我如何将不知道的数组发送给另一个玩家?

Apple 提到数据包可能会丢失。但是有一种“可靠”的模式可以防止这种情况发生。但是我找不到这样的。

有什么想法吗?

最佳答案

是的,您必须制定自己的协议(protocol)。 “制定协议(protocol)”是您自己做的事情。类似...基本上在服务器端

// 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

然后你定义你的协议(protocol)——至少是数据 block ——像这样:

typedef struct _CommsProt
{
BOOL happyThing;
someThings wotJustHappened;
float happyValue;
float anotherHappyValue;
// etc
}
CommsProt;

如果您是 GK 的新手,请注意这个关键提示......

Client/Server GKSessions

这也可以帮助...

Most effective way to do networking on Mac/iPhone?

一些有用的笔记...

(i) “客户端”和“服务器”无意义。您将能够向任一方向发送手提包信息(如上面的“CommsProt”)。如果您想将终端视为服务器(特别是如果您有集线器类型的配置),那很好。但这只是在你的脑海里。 (顺便说一句,通常你可能在每个方向上使用不同的数据结构,这很好。)

(ii) 关于套接字。如果您大量使用网络,您将不得不处理套接字并编写您自己的套接字代码。然而,您很可能会选择一个网络层,您甚至不必说“套接字”这个词!例如,GameKit + Bonjour 完全负责为您处理套接字,并且该组合负责另一个极其困难的问题,即寻找您的客户端/服务器之一.如果您是新手,我建议您暂时完全搁置套接字,并为您的网络层使用 GameKit(或 Windows 上的任何等效系统)之类的系统。

(iii) 事实上,一开始只使用像 GameKit 这样非常简单的东西,同时您弄清楚您的协议(protocol)和所有其他令人头疼的事情。稍后,如有必要,您可以重写网络层,或者切换到您听说过的其他包。令人高兴的是,上述代码示例之前的所有内容都将保持不变,只有网络层会发生变化。

(iv) 关于 WiFi。 GameKit 和大多数便利包与物理层完全无关:它们会为您处理。无论手机是否连接,GK 都可以正常工作——蓝牙、以太网等等!实际上,您“不会知道”正在使用哪个物理层。 (有时您无法控制这一点很烦人:随它去吧,用户根本不在乎。)

关于iphone - GameKit:向其他玩家发送可靠的 NSData?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5525311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com