2012-02-06 46 views
1

我開發了IOS應用程序,它需要從一個iPhone(或iPod)到另一個iPhone(或iPod)建立標準的TCP連接。連接在模擬器和設備上的應用程序之間以及兩個模擬器之間很好地工作。從ios連接()到同一子網中的ios設備

應用使用POSIX連接(),我必須堅持這種方法,因爲其他模塊是純C.

當調用連接()的應用程序塊,並返回超時錯誤之後。 通過局域網中的wifi進行通訊

我嗅探了流量並遇到了,連接模擬器後,設備發送ARP,回答後,標準TCP握手進行並進行會話。

與iPhone相同的情況<> iPhone在ARP請求後停止,因爲另一個iPhone不響應它。此外,iOS只發送免費ARP(宣佈它是mac ip pair)。我的MAC似乎正在處理這個請求,因爲它的ARP表有iPhone記錄,它不適用於另一個iPhone。

我試過bonjour服務,但它也只適用於模擬器<>設備。

我的問題: 有沒有什麼辦法允許這種溝通?這有可能只是我的iPhone的問題嗎?是否有任何明確的方法來告訴操作系統發送響應arps,或者是否以某種方式阻止通信ios通信。

+0

我懷疑ARP是紅鯡魚。你能否詳細說明如何找到其他設備的IP?除非在建立連接之前使用某些廣播數據包,否則您無法真正瞭解要連接的對等設備的IP地址 - 對於錯誤的IP地址,ARP設計會失敗。 – 2012-02-06 15:46:37

+0

在我的例子中,我知道另一個設備的IP,當我想連接(阻塞,發送ARP(對於iPhone)對於對等IP的MAC,並且在沒有響應 - >超時之後,它返回錯誤時引發問題)。 從MAC連接時,不存在ARP,因爲MAC緩存ios免費ARP消息,並且它僅發送SYN。 – macvek 2012-02-07 10:27:53

回答

1

不知道這是否會有所幫助,但我正在研究一個項目,它正在與網絡上宣佈自己的設備做類似的事情。我們使用SSDP從一個設備發出一個活動請求,其他設備正在監聽多播地址和端口。一旦每個設備收到活動信息,它就會發送一個包含所有相關信息(包括IP地址和端口)的響應。不幸的是,SSDP是一種發送和遺忘類型的協議,所以在那裏有問題。我們使用IP地址和端口信息將消息直接發送到每個設備。

再次,不知道這是否有助於您的情況,但迄今爲止我已經看到這項工作非常好。