Objective c 带有Mac服务器的iOS客户端应用程序

Objective c 带有Mac服务器的iOS客户端应用程序,objective-c,ios,cocoa,client-server,Objective C,Ios,Cocoa,Client Server,我正在尝试构建一个客户机/服务器游戏架构,并希望开始使用我的本地Mac作为服务器测试游戏。我找到了几篇关于Bonjour的文章,但这只是针对本地网络流量的。我的目标是使这个应用程序在Internet上工作,在静态地址上连接到托管的应用程序,以方便转换数据。然而,我不知道该使用哪种可可API来实现这一目的。我应该使用NSConnection,NSStream子类,还是使用好的'olcsockets等等。游戏状态已经在Objective-C中建立,一旦服务器设备准备就绪,就可以启动了。有什么见解吗?

我正在尝试构建一个客户机/服务器游戏架构,并希望开始使用我的本地Mac作为服务器测试游戏。我找到了几篇关于Bonjour的文章,但这只是针对本地网络流量的。我的目标是使这个应用程序在Internet上工作,在静态地址上连接到托管的应用程序,以方便转换数据。然而,我不知道该使用哪种可可API来实现这一目的。我应该使用
NSConnection
NSStream子类
,还是使用好的'olc
sockets
等等。游戏状态已经在Objective-C中建立,一旦服务器设备准备就绪,就可以启动了。有什么见解吗?

我建议您使用套接字,因为它们不难使用,而且是一种标准方式。我甚至围绕BSD套接字编写了一个异步包装器类:

这适用于简单的一对一TCP协议连接,同时支持IPv4和IPv6。您可以发送和接收原始NSData,并可能围绕它构建一个协议

基础类别,如NSURLConnection,并不专门用于此目的;而不是与标准HTTP服务器交互(我想您不想为游戏实现完整的HTTP服务器)

NSNetServices可能和CFNetwork一样适合您,但后者更难使用。如果您想使用基础类,我建议NSnServices。< /P>
希望有帮助。

我建议您使用套接字,因为它们不难使用,而且是一种标准方式。我甚至围绕BSD套接字编写了一个异步包装器类:

这适用于简单的一对一TCP协议连接,同时支持IPv4和IPv6。您可以发送和接收原始NSData,并可能围绕它构建一个协议

基础类别,如NSURLConnection,并不专门用于此目的;而不是与标准HTTP服务器交互(我想您不想为游戏实现完整的HTTP服务器)

NSNetServices可能和CFNetwork一样适合您,但后者更难使用。如果您想使用基础类,我建议NSnServices。< /P>
希望对您有所帮助。

NSConnection、NSStrean和C套接字是为不同的需求而构建的。为了获得更多帮助,您需要指定游戏的需求和服务种类。如果您想开发一个依赖于Internet而不是本地网络的客户机-服务器应用程序,Bonjour将无法提供帮助

C套接字和围绕它们的Cocoa API旨在在客户端和服务器之间的开放网络流上运行。拥有开放流的优点是,您可以让服务器向客户机发送数据,而不需要客户机请求数据。Cocoa中的NSURLConnection工作方式不同。使用它,您可以执行HTTP请求并从服务器接收格式化的响应

如果您的应用程序基于HTTP请求,我建议您将NSURLConnection或AFNetworking作为第三方替代方案。如果您的应用程序依赖于开放流,我建议您看看Apple的CFNetwork(BSD套接字的C包装,起源于Macs使用Carbon的年代,具有出色的性能、稳定性和多功能性)和GCDAsyncSocket,这是一个围绕BSD套接字的第三方库,支持Crand Central Dispatch,是Objective-C ready,而且做得很好


希望我能帮上忙。

NSConnection、NSStrean和C套接字是为不同的需要而构建的。为了获得更多帮助,您需要指定游戏的需求和服务种类。如果您想开发一个依赖于Internet而不是本地网络的客户机-服务器应用程序,Bonjour将无法提供帮助

C套接字和围绕它们的Cocoa API旨在在客户端和服务器之间的开放网络流上运行。拥有开放流的优点是,您可以让服务器向客户机发送数据,而不需要客户机请求数据。Cocoa中的NSURLConnection工作方式不同。使用它,您可以执行HTTP请求并从服务器接收格式化的响应

如果您的应用程序基于HTTP请求,我建议您将NSURLConnection或AFNetworking作为第三方替代方案。如果您的应用程序依赖于开放流,我建议您看看Apple的CFNetwork(BSD套接字的C包装,起源于Macs使用Carbon的年代,具有出色的性能、稳定性和多功能性)和GCDAsyncSocket,这是一个围绕BSD套接字的第三方库,支持Crand Central Dispatch,是Objective-C ready,而且做得很好


我希望我能帮上忙。

有很多不同的方法来实现这一点。这实际上取决于您将如何传递数据以及数据的用途

首先,我将设置一个主机名,您可以将其用于游戏的开发目的。您可以使用任何类似的方法为您的Mac设置此选项。然后,您可以启用编译器设置来关闭开发/生产URL


接下来,我建议您在游戏中使用TCP套接字(使用CocoaAsyncSocket-)。这种方法在您的用例中应该可以很好地工作。由于您使用的是基于回合的数据(而且所有这些数据都非常重要),因此我不建议使用UDP套接字(但如果您只传递位置、视频或音频数据,而丢弃的数据包可能并不重要,则这些套接字可以工作)。

有许多不同的方法来实现这一点。这实际上取决于您将如何传递数据以及数据的用途

首先,我将设置一个主机名,您可以将其用于游戏的开发目的。您可以使用任何类似的方法为您的Mac设置此选项。然后,您可以启用编译器设置来关闭开发/生产URL

接下来,我建议您在游戏中使用TCP套接字(使用CocoaAsyncSocket-)。使用ca时,这种方法应该可以很好地工作