簡體   English   中英

如何在基於Bonjour的ios應用程序中解析多個地址?

[英]How to resolved Multiple Address in Bonjour based ios application?

我正在嘗試在ios中實現基於Banjour的應用程序。 我也充分實現成功,也可以將數據發送到一個iPhone到另一個iPhone。 瀏覽服務后,所有其他設備都在工作。 並顯示在表格中。

在此處輸入圖片說明

現在,我想在表視圖中選擇一些設備,並將數據發送到選定的設備

在此處輸入圖片說明

為此,我在每個設備中僅創建了一個套接字。

CFSocketContext socketCtxt = {0, self, NULL, NULL, NULL};   
    witap_socket = CFSocketCreate(kCFAllocatorDefault, PF_INET6, SOCK_STREAM, IPPROTO_TCP, kCFSocketAcceptCallBack, (CFSocketCallBack)&TCPServerAcceptCallBack, &socketCtxt);

    if (witap_socket != NULL)        
    {
        protocolFamily = PF_INET6;
    }
    else 
    {
        witap_socket = CFSocketCreate(kCFAllocatorDefault, PF_INET, SOCK_STREAM, IPPROTO_TCP, kCFSocketAcceptCallBack, (CFSocketCallBack)&TCPServerAcceptCallBack, &socketCtxt);        
        if (witap_socket != NULL)
        {
            protocolFamily = PF_INET;
        }
    }    

現在我想將數據發送到選定的設備。 為此,我存儲了另一個NSMutableArray來存儲選擇的NSNetService(即設備)。 使用時單擊發送按鈕,將調用特定的操作。

-(void)SendActionFunction
{   
       for(int idx=0;idx<[selectedSer count];idx++)
    {
        NSNetService *service = [self.selectedSer objectAtIndex:idx];  
        NSLog(@"service......%@",[service name]);
        self.currentResolve = [self.selectedSer objectAtIndex:idx]; 
        [self.currentResolve setDelegate:self];     
        [self.currentResolve resolveWithTimeout:0.0];
    }
}

如果我想解析每個設備的地址(以上代碼)。 它將僅針對第一個設備進行解析。 並得到錯誤

  • (錯誤代碼= -72003)

如果我解析了設備的地址,它將自動從Tableview中刪除,這又是一個問題。

所以我的疑問是:

  1. 為什么選定的設備被撤銷?
  2. 現在我創建基於TCP的套接字,如何添加目標地址以發送數據?
  3. 是否可以將數據從單個套接字發送到多個目的地?

根據Apple的定義,CFSocket是使用BSD套接字實現的通信通道。

您已在設備之間建立套接字連接。 但是對於發送和接收數據,必須使用NSStreams。 文檔可以在這里找到

我看到您正在使用Apple的示例代碼Witap作為參考。

要發送和接收數據, 同時使用NSStreamDelegate

每1個設備1個設備解析並發送數據怎么樣? 聽起來更簡單:D

順便說一句,我在項目中使用了一個非常好的套接字庫:

https://github.com/robbiehanson/CocoaAsyncSocket

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM