2012-09-20 234 views
0

我試圖通過UDP進行廣播。我包含了CFNetworking框架,並將AsyncUDPSocket添加到了我的項目中。通過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),它運行良好!

+0

非常感謝,您節省了我的時間。我總是在這一行出現錯誤'const void * buf = [theCurrentSend-> buffer bytes];' – majorl3oat

0

您創建了套接字,但您是否創建了packet

+0

您應該能夠簡單地使用AsyncUdpSocket的sendData函數來發送數據包。它不需要手動構建。 – Beaker

+0

代碼片段不完整,所以當你引用'packet'時,它確實已經在那個點被初始化了。如果它沒有被初始化,或者它已經被釋放,那將會導致崩潰。 –

+0

我正在使用AsyncUdpSocket的一個實例。您不需要手動構建數據包。 – Beaker