在Mac / iPhone上进行联网的最有效方法是什么?

时间:2010-11-24 17:22:21

标签: iphone cocoa cocoa-touch macos networking

在Mac和iPhone上建立TCP连接或发送UDP数据报的最有效方法(即,努力与可读性和可维护性的最佳比率)是什么?我对经典的BSD插座非常熟悉,但我现在的目标并不是可移植性;我只是想尽快完成一个小项目。

我很想拥有Apple提供的Objective-C包装器,但我想听听一些关于人们通常做什么的想法。如果您认为BSD套接字是可行的方法,请随意提出一些想法:我真的只是想找到“正确的方法”来实现它。

让我们假定协议是自定义协议,因此基于Cocoa的HTTP客户端类无法满足我们的需求:)


我目前的目标是通过UDP在网络上传输设备状态(例如加速度计),同时还通过TCP维持信令和传递保证事件(例如,按下按钮)连接。桌面应用程序将显示此状态。

然而,我目前的申请正是让我提出这个问题的原因;我想知道人们通常做什么。大约7 - 8年前,当我最后认真使用VB6时,WinSock ActiveX控件的功能与BSD套接字相比有所不同,无论它在幕后做什么。

2 个答案:

答案 0 :(得分:6)

对于网络,简单的答案是,

(1)ASIHttpRequest ........ 注意 - 此QA非常陈旧。不幸的是,ASIHttpRequest仅具有历史意义,不再可用。

(2)AsyncSocket

(3)当你开始时... GameKit(一个孩子可以使用它)

(4)只需使用Bonjour(两行代码)即可找到其他设备。

“Apple提供的Objective-C包装器”...... AsyncSockets(最初由神秘的Dustin J. Voss编写) 非常好,Apple不会费心去写一个

AsyncSockets正是您所追求的。它在300,000个iFone应用程序中随处可用。它是iFone的“网络”。希望它有所帮助。

再注意 - 此质量保证非常陈旧。您现在可以轻松找到“AsyncSockets”等“现代版本”软件。

顺便说一下,只要使用GK就没有任何错误 - 完全没有任何问题......表现非常出色。关于唯一的缺点是配对只需要很长时间与GK。这对于十岁的孩子学习编程而言是一个幼稚的混乱。您可以直接使用AsyncSockets进行100倍快速配对。

你可能更喜欢使用一些玩具GK代码,而你可以找出Bonjour等等。

我认为意见的一致意见是,与AsyncSocket相比,在更低级别(即原始套接字)工作没有任何意义。在那里没有更多的性能。

注意 - 如果您是gamekit / iOS新手,请务必阅读此重要提示! Client/Server GKSessions

希望它有所帮助。

答案 1 :(得分:1)

你的问题无法用任何细节来回答,因为你没有描述你想做什么。我能给出的最佳答案是阅读MaciOS的介绍性网络指南。

<强>更新

我认为UDP内置的“简单的Cocoa方式”并不存在。我记得在可可开发列表中已多次提出这个讨论。 cocoaasyncsocket项目已被提到各个地方。它声称:

  

AsyncUdpSocket是一个UDP / IP套接字   包装的网络库   CFSocket。它几乎完全一样   TCP版本,但设计   专门针对UDP。这包括   排队的非阻塞发送/接收   运作,全员代表支持,   基于运行循环的自包含类   并支持IPv4和IPv6。