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
网友评论