2010-11-24 28 views
1

在Mac和iPhone上建立TCP連接或發送UDP數據報的最有效方式(也就是努力與可讀性和可維護性的最佳比率)是什麼?我對經典的BSD套接字非常熟悉,但我現在不打算輕鬆移植;我只是想盡快完成一個小項目。在Mac/iPhone上進行聯網的最有效方法是?

我很想擁有一個Apple提供的Objective-C包裝器,但我想聽聽關於人們常用的東西的一些想法。如果你認爲BSD套接字是要走的路,那麼也可以隨意挑選一些想法:我真的只是想找到「正確的方式」來做到這一點。

讓我們假定該協議是一個自定義的,所以我們的需求無法通過基於Cocoa的HTTP客戶端類:)


我現在的目標是流設備狀態(如加速計)在提供服務通過UDP的網絡,同時還通過TCP保持信令和傳送保證事件(例如,按鈕按下)連接。桌面應用程序會顯示此狀態。

但是,我目前的應用程序正是讓我問這個問題的原因;我想知道人們通常會做什麼。當我上一次在7-8年前認真使用VB6時,WinSock ActiveX控件做了與BSD套接字完全不同的事情,不管它在底層做了什麼。

回答

6

對於網絡,簡單的答案是,

(1)ASIHttpRequest ........ 注意 - 這QA是很老了。不幸的是,ASIHttpRequest僅僅具有歷史意義,不再可用。

(2)AsyncSocket

(3)當你開始...的GameKit(一個孩子可以使用它)

(4)只要使用Bonjour(兩行代碼)找到其他設備。

「Apple提供的Objective-C包裝器」... AsyncSockets(最初由神祕的Dustin J.沃斯)是不錯,蘋果只是不會試圖寫一個

AsyncSockets正是你所追求的。它在300,000個iFone應用程序中隨處可見。它「是」在iFone上聯網。希望能幫助到你。

再次注意 - 此QA是非常陳舊的。您現在可以輕鬆找到「現代版本」的軟件,如AsyncSockets。

順便說一句,沒有任何錯誤 - 完全沒有任何錯誤 - 只需使用GK即可。性能可能非常出色。關於唯一的缺點是配對只需要很長時間就可以與GK配對。這是一個爲十歲學生編程而創建的幼稚混亂。您將能夠以100倍的速度與AsyncSockets直接配合工作。

你可能更喜歡使用一些玩具GK代碼,而你找出Bonjour和所有這一切。

我認爲意見的一致意見是沒有一點工作在比AsyncSocket更低的水平(即原始套接字)..那裏沒有更多的性能。

注 - 如果您是gamekit/iOS的新手,請務必閱讀此重要提示!
Client/Server GKSessions

希望它有幫助。

1

你的問題不能真正回答任何細節,因爲你沒有描述你想要做什麼。我可以給出的最佳答案是閱讀MaciOS的入門網絡指南。

更新

我不認爲有任何「易可可路」建在UDP。我記得這個討論已經在可可開發名單上多次提出。 cocoaasyncsocket項目已被各地提及。它聲稱:

AsyncUdpSocket是一個封裝 CFSocket一個UDP/IP套接字 網絡庫。它的工作原理與TCP版本的 幾乎完全相同,但專門用於UDP的設計爲 。這包括 排隊非阻塞發送/接收 操作,全委託支持, 基於運行循環,自包含類, 和支持IPv4和IPv6。

+0

雖然我仍然不認爲我目前的應用程序對我的問題非常重要,但我已經用更多信息更新了它。我知道CFSockets,我知道如何處理BSD套接字,但我想知道在Apple平臺上建立連接/數據報流的最佳和最簡單的方法。更多的是「最佳實踐」問題而不是「如何做到這一點」的問題。 – 2010-11-24 18:36:20

+0

我明白。我已經更新了我的答案,以包含對UDP包裝類的引用。 – 2010-11-24 18:47:38

相關問題