ios tcp socket操作问题
我在ios平台用 POSIX socket 去和服务器通信,十分左右 write函数就会返回 -1 写错误,而用 NSStream 就不会出错。请问用 在 ios 下 POSIX socket有什么要注意的。另外有什么比较好的socket通信的库,调用 connect ,write 之后都能返回状态的,而不是通过代理获取状态的这种 tcp socket库?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(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
获取错误码推荐一个专注于移动平台客户端的socket库,支持ios,android,osx,windows, 内部处理TCP拆包,精确的错误处理,业务只需要关心包事件,连接等网络事件,开发客户端网络从未如此简单。
GitHub地址: https://github.com/yasio/yasio