2011-09-15 189 views
6

我在我的應用程序中編寫了一個代碼來啓用設備到設備的無線通信(僅傳輸文本/字符串)。該代碼與Apple的示例Witap應用程序是從Developer下載的。 Apple.com。Wifi設備到設備通信問題

它在我的網絡工作很好,另一個網絡也。

但它不在我的客戶端工作。

我花了很多時間在客戶端解決設備問題,而不是互相通信,這就是我發現的問題。他們在安全設置塊點對點通信......」我的設備通信標識爲對等。

有什麼辦法來解決這個問題 難道還有比端2 PEER WiFi通信以外的任何蘋果公司支持?

原型WIFI應用工作概念


主要有四類中命名爲AppController中,選取器,BrowserViewController,TCP服務器應用的WiFi。

當應用程序加載時,AppController類將初始化NSInputStraem和NSOutPut Stream。

而且它會調用TcpServer類的「start」方法來設置端口號。

它將從TcpServer類調用「enableBounjourWithDomain」方法後。

上面的方法調用時使用了一個叫做標識符的參數(它是一個常用的名字,例如:WiTap),發件人部分使用這個公共標識符搜索設備。

執行此方法後,發件人設備可以識別我們的設備並能夠連接。

獲取自己的設備名稱


的Tcp serverServer代表「DidEnabledBounjer」上面的代碼執行後,會工作,它會給當前的設備名稱。

然後NSNetservice委託「didFindService」將工作(它發揮作用時,每個服務發現)並檢索發現的服務名稱。

獲得新的服務名稱後,我們將檢查它是否與我們從「DidEnabledBounjer」委託人獲得的設備名稱相同。

如果沒有,新的服務名稱將添加到名爲services的NSMutable數組中。

然後服務數組綁定到Table視圖,我們可以看到發現的設備名稱列表。

發現新設備:


用於發現新設備無計時器設置。

當在同一個WiFi網絡中連接新設備時,「DidFindservice」委託將觸發(它是在BrowserViewController類中實現的NSNetservice委託)。

DidFindservice會給出新的設備名稱。得到它後,我們將檢查它是否與我們從「DidEnabledBounjer」代表獲得的設備名稱相同。如果不是,服務名將添加到名爲services的NSMutable數組中。

然後根據設備名稱對所有發現的設備名稱進行排序並重新加載表格視圖。

從表視圖


選擇一個設備名稱上的TableView它點擊設備名稱後後工作將調用其在BrowserViewController類中實現「didSelectRowAtIndexPath方法」委託(它是一個TableView中類代表)。

它將根據TableView索引從我們的服務數組(包含所有發現的服務)中選擇一個NetService名稱,並將生成的NSService設置爲當前服務。

觸發委託「didResolveInstance」,它將設置InPutStream和OutPutStream值。

獲得了InPutStream和OutPutStream的值後,它將調用「OpenStream」方法打開輸入和輸出流。

最後,它釋放NSService和Picker對象,並準備用選定設備發送消息。

send按鈕


呼叫從BrowserViewController類與字符串參數。它可能是用戶的文本輸入或語音識別後生成的字符串「發送「功能的工作。

將輸入字符串轉換爲uint_8數據類型並將其發送到接收設備。

接收機側工作


當數據來到接收機設備的「TcpServerAcceptCallBack」代表將觸發(在TCPSERVER類實現)。

它將通過另一個名爲「HandleNewConnectionFromAddress」的TcpServer類委託從BrowserViewControll calss調用「DidAcceptConnectionForServer」方法。

觸發「AppController」類中的「流處理委託」,它將檢查是否存在任何可用的邊框。

如果字節可用,則將uint_8類型的數據轉換爲字符串,然後我們在接收器文本框中顯示結果字符串。

還可以加載圖像並使用結果字符串將其顯示在AppBundle的圖像視圖中。 </012>

回答

1

在WiTap源網絡/ TCPServer.m中,套接字的端口設置爲零(=內核選擇一個端口號,並且它的值大於50000)。您可以將其更改爲0 81,並且這個多孔的安全設置將不再將您歸類爲peer2peer。 1和1023之間的任何值都應該有效。

+0

完成更改後出現同樣的問題 – humblePilgrim

+0

修復程序是否正常工作,即是否可以看到tcp-server在端口81上使用「netstat -a」進行監聽? –

+0

對不起,我想我不會阻止我的網絡端口成功/阻止我辦公室中的對等通信,以產生這裏的情況。 – humblePilgrim

0

您應該進行基本的連接測試,以確定網絡的阻塞情況。

從一個簡單的ping開始,轉到UDP和TCP層。你可能會發現某種形式的交流是被允許的。

如果沒有,您可以嘗試告訴他們的安全人員接受特定範圍的IP地址和/或端口號之間的某種形式的通信,並相應地調整您的應用程序。