0

我正在尝试在 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. 是否可以将数据从单个套接字发送到多个目的地?
4

2 回答 2

0

What about resolve and send datas 1 device per 1 device ? Sounds easier :D

BTW, there is a really nice socket library I used for a project :

https://github.com/robbiehanson/CocoaAsyncSocket

于 2013-04-26T15:07:10.303 回答
0

根据 Apple 的定义,CFSocket 是使用 BSD 套接字实现的通信通道。

您已在设备之间建立了套接字连接。但是对于发送和接收数据,您必须使用 NSStreams。文档可以在这里找到

我看到您使用 Apple 的示例代码 Witap 作为参考。

对于发送和接收数据,也可以使用NSStreamDelegate

于 2012-06-18T12:21:23.353 回答