iPhone UDP трансляция и ответ - PullRequest
       4

iPhone UDP трансляция и ответ

8 голосов
/ 03 октября 2011

Мне нужно отправить широковещательную рассылку UDP с iPhone, а затем прослушать ответ UDP с периодом ожидания. Я нашел пример Apple UDPEcho , но я не уверен, что мне это нужно. Также найдено этот пример для отправки, но не получения. По сути, мне нужно сделать что-то простое, как это:

//send the broadcast
SendUDP("255.255.255.255", targetPort, myData);
//A blocking call to get the data.  Timeout value will be short, 2 seconds at most
//An asynchronous option is ok, if it's necessary.
Response = GetFirstUDPResponse(receptionPort, timeoutValue);

//process the response
if(Response == null)
  //we timed out
else
  //process response

Я надеюсь на простое решение, где мне не придется изобретать велосипед. Я ценю любые советы по лучшей стратегии для реализации этого!

Ответы [ 2 ]

5 голосов
/ 04 октября 2011

Я бы поместил 'recvfrom' в другой поток, используя грандиозную центральную диспетчеризацию, например:

// Use grand central dispatch so we don't block the interface
dispatch_async(dispatch_get_global_queue(0, 0), ^{

    recvfrom(...) // Receive with a 2s timeout

    dispatch_async(dispatch_get_main_queue(), ^{ // The main thread stuff goes here

        if (received ok) {
            [self receivedData:some data];
        } else {
            [self timedOut];
        }

    });
});
5 голосов
/ 03 октября 2011

Вы можете использовать cocoaAsyncSocket , который проще в использовании, чем нативные классы Apple.
Он поддерживает UDP с классом AsyncUdpSocket.

AsyncUdpSocket - это сетевая библиотека сокетов UDP / IP, которая упаковывает CFSocket. Он работает почти так же, как версия TCP, но разработан специально для UDP. Это включает в себя неблокирование в очереди операции отправки / получения, полная поддержка делегатов, на основе цикла выполнения, автономный класс и поддержка IPv4 и IPv6

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...