2012-09-20 2 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

Вы должны иметь возможность просто использовать функцию sendData AsyncUdpSocket для отправки пакета. Его не нужно создавать вручную. – Beaker

+0

Фрагмент кода является неполным, поэтому неясно, когда вы ссылаетесь на 'пакет', который фактически был инициализирован в этой точке. Если он не был инициализирован или если он был выпущен, это будет связано с сбоем. –

+0

Я использую экземпляр AsyncUdpSocket. Вам не нужно создавать пакеты вручную. – Beaker