美文网首页iOS学习
iOS 第三方框架CocoaAsynSocket编写的局域网聊天

iOS 第三方框架CocoaAsynSocket编写的局域网聊天

作者: Mr吴标 | 来源:发表于2016-05-13 21:51 被阅读424次

    CocoaAsynSocket编写的局域网聊天室Demo

    在做iOS 客户端 Server-Client项目的时候,需要Client登录和长连接。所以,网络和socket的问题,变得重要起来。
    
    在网上查阅找一些资料,供网友参考,下面是遇到的一些错误码:
    
    * Domain=NSPOSIXErrorDomain Code = 51 "Network is unreachable"
    
    * Domain=NSPOSIXErrorDomain Code = 54 "Connection reset by peer" 连接复位 "在连接断开后的读和写操作引起的"
    
    * Domain=NSPOSIXErrorDomain Code = 57 "Socket is not connected"
    
    * Domain=NSPOSIXErrorDomain Code = 60 "Operation timed out"
    
    * Domain=NSPOSIXErrorDomain Code = 61 "Connection refused"
    
    * Domain=NSPOSIXErrorDomain Code = 65 "No route to host"
    
    * 更多的错误码在 #include <sys/errno.h>里
    
    Domain=NSPOSIXErrorDomain Code = 65 "No route to host"
    
    网上
    
    以上摘自:http://stackoverflow.com/questions/3635412/intermittent-no-route-to-host-on-ios-flight-mode-off-then-on-fixes
    
    Domain=NSPOSIXErrorDomain Code = 57 "Socket is not connected"
    
    通常是网络立即断开,比如切换为“飞行模式”,立即得到一个Socket is not connected。
    Domain=NSPOSIXErrorDomain Code = 60 "Operation timed out"
    
    【问题】提示POSIX:Operation timed out?!!!怎么解决 啊??
    【解决】:
    
    ● 连接超时,注意是局域网版本。真机调试时要确定手机和电脑是在同一个局域网内。
    
    
    Domain=NSPOSIXErrorDomain Code = 61 "Connection refused"
    
    看到书上的代码中一般建立一个socket连接,进行一次send、recv,然后close(socket)。现在在一次连接中进行了两次send、recv,然后就发现在进行大概二三十次的重复过程后,就会出现connect failed,connection refused的提示,网上查资料时说出现connection refused一般是因为服务器的端口没有打开,可是端口是开着呀,不知道怎么回事了!是不是因为在一次连接中进行了两次收发数据的原因呢?因为在之前进行一次收发数据的时候是很稳定的,盼cu的高手来指点一下。
    
    如果是客户端去连接对应服务端的端口,肯定需要服务端的端口开着的。我估计你的服务端也是自己写的。
    
    1、可能是客户端连接后没有close,次数一多,服务端没资源提供服务而连接不上,你的情况close了,而且20~30次不会是这种问题。
    
    2、服务端没开,你所说的端口是开着的我不是很相信,我觉得更多的可能是你的服务端不健壮,你用客户端send了几次后把服务端的程序给搞死了。
    
    3、第三种可能就是网络问题,我觉得可能性不大。
    
    综上,我认为是2情况导致,你下次模拟重现的时候,如果再发生你说的情况,请到你开服务端的程序看看,看是不是被搞死了。
    
    Domain=NSPOSIXErrorDomain Code = 51 "Network is unreachable"
    
    当前设备没有网络,然后执行连接操作,就会有报51的错误。
    Domain=NSPOSIXErrorDomain Code = 54 "Connection reset by peer"
    
    找遍了中英文的一些网站,搜遍了能找的每个角落,发现了出现这种状况的原理,该异常在客户端和服务器端都有可能发生,引起该异常的原因有两个: 
    
    1,如果一端的Socket被关闭(或主动关闭,或因为异常退出而 引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常(Connect reset by peer)。 
    
    2,一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常(Connection reset)。 
    
    简单的说就是在连接断开后的读和写操作引起的。
    
    上面一段摘自:http://phl.iteye.com/blog/1883742
    
    TCP机制中,socket连接的双方都可以调用close()之类的函数退出当前连接,TCP根据改进了的三次握手机制通知另一方也退出当前连接。这个过程可以看做是正常socket连接的一部分。同时,TCP提供一种复位机制,在一方的程序遇到异常情况断开此次连接后,会向对方发送重置报文。复位是即时的退出,并清理此次连接相关的所有资源。
    
    所以出现Connection reset by peer的原因是对端服务器异常退出了此次连接。
    
    客户端遇到这种情况,只有重新和服务器端建立连接。我遇到的这种情况下,有时要重试5次左右才能够正常连接上。
    
    上面一段摘自:http://blog.csdn.net/shaovey/article/details/4678717
    

    相关文章

      网友评论

        本文标题:iOS 第三方框架CocoaAsynSocket编写的局域网聊天

        本文链接:https://www.haomeiwen.com/subject/trrmrttx.html