BSD套接字在iPhone 3G环境下无法正常工作

3
我注意到在为iPhone 3G开发时,BSD套接字函数经常会失败。同时我也发现,当时3G天线甚至没有开启,也没有WIFI网络来支持网络请求(所以它不支持网络请求似乎很荒谬)。这些信息是通过苹果SDK中名为Connectivity Test的应用程序验证的。
基本上,如果您加载Safari或其他内容,然后快速加载应用程序,那么一切都会正常。当然,这并不理想。显然,在苹果看来,gethostbyname()或类似的函数绝不是打开天线的理由。
我联系了苹果,他们说BSD函数不会打开天线,但调用所有Objective-C CFNetwork函数会。我想要可移植的代码,有没有办法保留我的现有BSD设置?我真的不喜欢使用Objective-C编程,所以如果有人知道解决方法,那就太棒了。

Kyle,回答你在编辑评论中提出的问题:没有理由给你的问题打上“编程”标签——如果它与编程没有任何关系,你就不应该将其发布到SO。这就是我删除该标签的原因。 - Michael Petrotta
明白了。也许不应该允许这样做,这样可以节省大家的时间。将其标记为这样似乎是一种本能。 - Kalen
1个回答

8

CFStream Socket Additions 是苹果推荐的替代直接使用BSD sockets的方法。他们明确警告不要在此处使用BSD sockets here:

虽然iPhone OS中提供了BSD(POSIX)网络API,但应避免使用它们。如果直接使用sockets进行通信,则某些iPhone OS的网络功能(例如VPN On Demand)将无法正常工作。请改用CFStream Socket Additions提供的API。

请注意,CFNetwork等并不是Objective-C,而几乎所有内容都是纯C。


我想知道为什么他们省略了它不能启动蚂蚁的事实。 - Kalen
CFNetwork就是它了!然后其他人都回到标准了,哈哈。 - Kalen
@Kyle:公正地说,你能在Android、WebOS或Windows Phone 7系列上直接使用你的BSD套接字代码吗?这种元素往往很难做到真正的跨平台(与数据模型或核心逻辑代码相反)。 - Brad Larson
Android NDK和WebOS PDK都是不错的选择,但我认为7系列会让开发者们面临很多移植工作,因为涉及到托管代码和.NET库。我不确定它们是否允许DLL查找,但我猜测我们可能会遇到一些麻烦。 - Kalen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接