2011-04-02 50 views
0

好的,我设法创造了两名球员之间的比赛。现在我会做一些关于发送数据给玩家的测试。GameKit:向其他玩家发送可靠的NSData?

我没有完全得到关于NSData的解释。基本上,它是什么?我该如何向其他玩家发送一个不知道的数组?

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

任何想法?

回答

2

是的,你必须使你自己的协议。 “制定协议”是你自己做的事情。喜欢的东西......基本上在服务器端

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

如果你是新的GK,要注意这个关键尖...

Client/Server GKSessions

这也可以帮助...

Most effective way to do networking on Mac/iPhone?

一些有用的笔记...

(I) “客户端” 和 “服务器” 的意思是什么都不。您将能够向任何方向发送信息手提包(如上面的“CommsProt”)。如果你想考虑并参考一个,结束作为一个服务器(特别是如果你有一个集线器类型的安排),那很好。但它只是在你的脑海中。 (顺便说一下,通常你可能在每个方向上使用不同的数据结构,这是非常好的。)

(ii)关于套接字。如果您大量使用网络,则必须处理套接字并编写自己的套接字代码。但是,很可能你可以选择一个网络层,你甚至不需要说“套接字”这个词!例如,GameKit + Bonjour完全负责为您处理套接字,并且该组合需要处理另一个难以置信的难题找到您的客户端/服务器之一。如果你是新手,我建议你现在完全预留套接字,并且为你的网络层使用一个系统,比如GameKit(或者任何与Windows相同的东西)。 (iii)确实AT FIRST只是使用一些非常简单的GameKit,而你找出你的协议和所有其他令人头疼的问题。。稍后,如有必要,您可以重写网络层切换到您听说的其他一些包。令人高兴的是,上面代码示例中的所有内容都将保持不变,只有联网层会发生变化。 (iv)关于WiFi。 GameKit和大多数便利软件包,对物理层完全不可知论:它们会为您提供帮助。 GK可以正常工作,但手机已连接 - 蓝牙,以太网,无论如何!事实上,你“不会知道”正在使用什么物理层。 (它有时很烦人,你不能控制这个:放手吧,用户不会在意)

+0

谢谢,这有助于我进步。我有先进的,现在面临一个错误... http://stackoverflow.com/questions/5525516/sending-data-error – Voldemort 2011-04-02 19:59:53

相关问题