iPhone UDP广播和响应

时间:2011-10-03 03:24:43

标签: iphone objective-c ios sockets udp

我需要从iPhone发送UDP广播,然后在超时期限内侦听UDP响应。我找到了Apple的UDPEcho example,但我不确定这是否是我需要的。还发现this example要发送但未收到。基本上,我需要做一些像这样简单的事情:

//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 个答案:

答案 0 :(得分:5)

您可以使用比苹果本地类更容易使用的cocoaAsyncSocket 它支持UDP与AsyncUdpSocket类。

  

AsyncUdpSocket是一个包装的UDP / IP套接字网络库   CFSocket。它几乎完全像TCP版本,但是   专为UDP设计。这包括排队的非阻塞   发送/接收操作,完全代表支持,基于运行循环,   自包含类,以及对IPv4和IPv6的支持

答案 1 :(得分:5)

我将'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];
        }

    });
});