[英]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];
}
}
如果我想解析每個設備的地址(以上代碼)。 它將僅針對第一個設備進行解析。 並得到錯誤
如果我解析了設備的地址,它將自動從Tableview中刪除,這又是一個問題。
所以我的疑問是:
根據Apple的定義,CFSocket是使用BSD套接字實現的通信通道。
您已在設備之間建立套接字連接。 但是對於發送和接收數據,必須使用NSStreams。 文檔可以在這里找到
我看到您正在使用Apple的示例代碼Witap作為參考。
要發送和接收數據, 請同時使用NSStreamDelegate 。
每1個設備1個設備解析並發送數據怎么樣? 聽起來更簡單:D
順便說一句,我在項目中使用了一個非常好的套接字庫:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.