在Mac和iPhone上建立TCP连接或发送UDP数据报的最有效方法(即,努力与可读性和可维护性的最佳比率)是什么?我对经典的BSD插座非常熟悉,但我现在的目标并不是可移植性;我只是想尽快完成一个小项目。
我很想拥有Apple提供的Objective-C包装器,但我想听听一些关于人们通常做什么的想法。如果您认为BSD套接字是可行的方法,请随意提出一些想法:我真的只是想找到“正确的方法”来实现它。
让我们假定协议是自定义协议,因此基于Cocoa的HTTP客户端类无法满足我们的需求:)
我目前的目标是通过UDP在网络上传输设备状态(例如加速度计),同时还通过TCP维持信令和传递保证事件(例如,按下按钮)连接。桌面应用程序将显示此状态。
然而,我目前的申请正是让我提出这个问题的原因;我想知道人们通常做什么。大约7 - 8年前,当我最后认真使用VB6时,WinSock ActiveX控件的功能与BSD套接字相比有所不同,无论它在幕后做什么。
答案 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)
你的问题无法用任何细节来回答,因为你没有描述你想做什么。我能给出的最佳答案是阅读Mac和iOS的介绍性网络指南。
<强>更新强>
我认为UDP内置的“简单的Cocoa方式”并不存在。我记得在可可开发列表中已多次提出这个讨论。 cocoaasyncsocket项目已被提到各个地方。它声称:
AsyncUdpSocket是一个UDP / IP套接字 包装的网络库 CFSocket。它几乎完全一样 TCP版本,但设计 专门针对UDP。这包括 排队的非阻塞发送/接收 运作,全员代表支持, 基于运行循环的自包含类 并支持IPv4和IPv6。