我需要从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
我希望有一个简单的解决方案,我不需要重新发明轮子。我很欣赏有关实施此项目的最佳策略的任何建议!
答案 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];
}
});
});