ios tcp socket操作问题

我在ios平台用 POSIX socket 去和服务器通信,十分左右 write函数就会返回 -1 写错误,而用 NSStream 就不会出错。请问用 在 ios 下 POSIX socket有什么要注意的。另外有什么比较好的socket通信的库,调用 connect ,write 之后都能返回状态的,而不是通过代理获取状态的这种 tcp socket库?

阅读 4.1k
3 个回答

首先声明下你的问题我回答不了。你是搞网络的,应该知道一句简单的为什么返回 -1 可能不是个 good question.

其次,尝试回答下你的其它问题,顺便说下我个人的看法。

我是N年刚进一家做社交app的创业公司时,用过POSIX,支持 iOS3.1.3~iOS4 系统。我们经理要我把 iOS 和 Android的 IM 都改掉,掉线、重练、卡死、内存、线程很多问题... 为了跨平台,我就首选了 POSIX 开发,中间出了很多问题,资料又少,经常晚上加班跟服务端交流学习,那套服务端代码是经历过五六年千万级在线的考验沉淀下来的。不过后来还是没坚持下来,最终选择了 CFNetwork ,后来因为 iOS 的升级出过几次bug,再后来直到现在一直用的 GCDAsyncSocket。后来也开发过音视频协议、客户端自建server等,都没有用 POSIX。

说这些其实只是想说你先好好想想为什么要用POSIX,跨平台?自定义协议?如果都不是,强烈建议选择更高级的api或者使用成熟的第三方库。

iOS下的 POSIX 一直坑很多,需要有充足的经验,熟读苹果文档,而且要紧跟系统更新而更新,以及完善的测试。因为选择 POSIX 就意味着要自己处理 IP, 支持 IPv4/IPv6/IPv6-only, 自己处理Wifi/WWAN切换,IP reachability, VPN,线程安全,内存,各种网络异常,一些神奇的网络“假死”等等...iOS明年起强制https,你也要跟着更新。

把苹果官方的网络编程文档看一两遍是必须的。至于你要的socket库,很久前见过有几个移植项目,支持 iOS,现在可能都不维护了,名字我也忘干净了,你在开源代码托管网站和google groups上搜一下。我是最近测试个东西才玩了几天segmentfault,据我现在的观察,在这里找不到你现在及以后要碰到的问题的答案,stackoverflow都未必能找到。学习以及解决问题的途径就是看别人代码,苹果开源代码是一块宝地。

可能我说的严重了,也可能你要的功能没我想象的复杂,还是那句话,除非你必须跨平台或者必须实现自定义协议,而且有足够的时间去填坑,那就接着玩POSIX,否则选用高级api或第三方库。

友情提示:珍爱生命。

write返回-1后,请使用errno获取错误码

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题