我应该使用哪个高级API来管理iOS上的UDP套接字?

前端之家收集整理的这篇文章主要介绍了我应该使用哪个高级API来管理iOS上的UDP套接字?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在“ Network Programming Topics Conceptual Guide”的“ Using Sockets and Streams”一章中,Apple说:

Note: POSIX networking does not activate the cellular radio on iOS.
For this reason,the POSIX networking API is generally discouraged in
iOS.

同样在“Networking Overview Guide”的“Networking Tips and Pitfalls”一章中,Apple说:

In iOS,using sockets directly using POSIX functions or CFSocket does
not automatically activate the device’s cellular modem or on-demand
VPN.

好的,所以在iOS上,既不应该使用POSIX套接字也不应该使用CFSocket,这只是一个围绕POSIX套接字的薄包装,它支持通过RunLoops进行异步网络连接.没问题.但是,如果需要UDP套接字,您应该使用什么API?

Apple在“Networking Overview Guide”的章节“Networking Tips and Pitfalls”中进一步说:

Avoid Resolving DNS Names Before Connecting to a Host

因此,理想情况下应该有一个用于管理UDP套接字的API,而不是POSIX API和CFSocket,它接受DNS名称而不是目标地址的IP地址.

也许我是盲人但我找不到任何这样的API.有任何想法吗?

使用任何第三方API(不是Apple)都不是很有趣,因为这样的API必须基于Apple API,在这种情况下我可以直接使用这个Apple API.在POSIX套接字周围编写我自己的包装器API是小菜一碟,我之前写过很多套接字包装器,我已经知道了所有令人讨厌的陷阱.但我不会使用POSIX API,这是最初的问题.

解决方法

我向Apple提出了完全相同的问题,他们的回复或多或少是因为UDP套接字没有任何高级接口.无论Apple在他们的指南中说什么,当使用UDP时,要么直接使用POSIX套接字,要么与poll()或select()等异步管理器结合使用,要么创建POSIX套接字(可能使用bind()和/或connect( )根据需要)然后使用CFSocketCreateWithNative()将其包装到CFSocket对象中以获得RunLoop集成.这是最好的API.所有更高级别的API都设计为仅与TCP一起使用.

猜你在找的iOS相关文章