2016-07-06 3 views
0

iOS에서 브로드 캐스트 UDP 데이터 그램을 수신하려고합니다. 나는 꽤 좋은 것처럼 보이는 CocoaAsyncSocket 라이브러리를 사용하기 시작했다. 나는 이것을 다음과 같이 사용하고있다 :UDP 브로드 캐스트 데이터 수신

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을 사용하여 무언가를 놓치고 있습니까?

+0

오류가 있습니까? 포트 또는 기타에 바인딩하는 데 실패했습니다. – Bharat

+0

오류가 없습니다. 콜백이 아니고 반환 값이 아닙니다. –

+0

응답 하시겠습니까? WireShark를 사용하여 패킷이 전송되고 응답을 받고 있는지 확인하십시오. – Bharat

답변

0

CocoaAsyncSocket에서 코드를 읽으면 위임자에 대한 참조를 보유한 멤버가 약하다는 것을 알 수 있습니다. 따라서 콜백이없고 오류가 발생하지 않은 이유는 대표가 해제 되었기 때문입니다. 객체에 대한 강력한 참조를 저장하면 데이터를 얻는 데 충분했습니다.

관련 문제