通过 AsyncUDPSocket 发送时崩溃
Posted
技术标签:
【中文标题】通过 AsyncUDPSocket 发送时崩溃【英文标题】:Crash when sending via AsyncUDPSocket 【发布时间】:2012-09-20 04:18:41 【问题描述】:我正在尝试通过 UDP 进行广播。我包含了 CFNetworking 框架并将 AsyncUDPSocket 添加到我的项目中。
#import "AsyncUdpSocket.h"
然后我创建了一个套接字:
broadcastSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];
我发送数据为:
[self.broadcastSocket enableBroadcast:YES error:&error];
[self.broadcastSocket sendData:[@"hello" dataUsingEncoding:NSASCIIStringEncoding] toHost:@"255.255.255.255" port:5538 withTimeout:10 tag:1];
但是当我发送数据时,AsyncUdpSocket 崩溃并出现 EXC_BAD_ACCESS
- (CFSocketRef)socketForPacket:(AsyncSendPacket *)packet
具体在
return ([packet->address length] == sizeof(struct sockaddr_in)) ? theSocket4 : theSocket6;
或者它有时也会崩溃:
- (void)doSend:(CFSocketRef)theSocket
在
const void *buf = [theCurrentSend->buffer bytes];
我的插座有什么问题吗?
【问题讨论】:
【参考方案1】:啊,我明白了。我更新到最新版本的 AsyncUDPSocket,它需要 ARC。有一个警告,它发出的问题没有在我的调试器中弹出,这是另一个问题。但是,查看源代码时,它在第 11 行。Doh!
添加了 ARC 标志 (-fobjc-arc),它运行良好!
【讨论】:
非常感谢,您节省了我的时间。我总是在这一行得到错误 'const void *buf = [theCurrentSend->buffer bytes];'【参考方案2】:您创建了套接字,但您是否创建了packet
?
【讨论】:
你应该可以简单地使用AsyncUdpSocket的sendData函数来发送一个数据包。不需要手动构建。 代码 sn-p 不完整,所以不清楚当你引用packet
时它实际上已经被初始化了。如果它没有被初始化,或者它已经被释放,那将导致崩溃。
我正在使用 AsyncUdpSocket 的一个实例。您不需要手动构建数据包。以上是关于通过 AsyncUDPSocket 发送时崩溃的主要内容,如果未能解决你的问题,请参考以下文章