接收UDP广播数据

时间:2016-07-06 16:10:27

标签: ios sockets udp cocoaasyncsocket

我试图在iOS上接收广播UDP数据报。我开始使用CocoaAsyncSocket库,看起来还不错。我这样使用它:

m_socket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
[m_socket setIPv6Enabled:NO];

NSError* error = nil;
if (![m_socket enableBroadcast:YES error:&error])
    return log_warn(@"Failed to enable broadcast: %@.", error.description);
if (![m_socket bindToPort:43211 error:&error])
    return log_warn(@"Failed to bind to port: %@.", error.description);
if (![m_socket beginReceiving:&error])
    return log_warn(@"Failed to begin receiving.");

结果是似乎没有调用didReceiveData回调。 因此我尝试使用常规套接字API,似乎我可以获得一些字节:我只使用this code

我很好奇为什么上面的CocoaAsyncSocket代码不起作用。我尝试通过读取CocoaAsyncSocket的内部结构来比较这两种方法,但我仍然无法找到导致没有字节到达的差异。我是否在使用CocoaAsyncSocket错过上述代码中的内容?

1 个答案:

答案 0 :(得分:1)

通过读取CocoaAsyncSocket中的代码,我看到持有对委托的引用的成员很弱。因此,没有收到回调和没有错误的原因是委托被释放。存储对象的强引用就足以获取数据。