美文网首页
socket通信 的一些坑

socket通信 的一些坑

作者: 东方诗空 | 来源:发表于2017-10-12 11:11 被阅读302次

因为项目中用用到socket通信 实现夸平台的局域网实时通信。下面罗列一些我在使用过程中遇见错误和我的处理方式:一般socket通信的错误都会传到- (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)error 这个代理方法中

1.Error Domain=GCDAsyncSocketErrorDomain Code=4 "Read operation timed out" UserInfo=0xa8db6a0 {NSLocalizedDescription=Read operation timed out}
scoket读取数据超时,当网络不怎么稳定通信方给发送消息的时候时不时的会冒一个这个错误,而且Socket也会自动断开连接。一直跟踪GCDAsyncSocket.m的代码5068行<可能代码有更新的会有点差异>有一个方法

  • (void)setupReadTimerWithTimeout:(NSTimeInterval)timeout
    这个方法是就是专门监听socket读取数据是否有超时的现象的方法,源代码设置成if(timeout >= 0.0)即检测到超时就抛异常 这样很容易导致socket连接异常。
    处理方式:你可以打印一下这个timeout值,就会大概知道你的socket读取数据超时的范围,在项目允许的范围内设置这个值的大小,因为我的项目总是在10以内,所以我设置成if(timeout > 10.0)之后,基本运行的时候就很少抛这个异常了。你也可以再接收到这个异常的时候重新连接一次。

2.Error Domain=GCDAsyncSocketErrorDomain Code=3 "Attempt to connect to host timed out" UserInfo=0x7bd14f40 {NSLocalizedDescription=Attempt to connect to host timed out}
socket连接的时候超时,一般发生在你向服务端发送一条连接消息的时候,服务端无响应,一般是由于服务端没有开启服务,也有可能是设置响应时间的timeout值过小,在GCDAsyncSocket.m的代码1938行的位置有一个设置timeout的地方 你可以设置一个稍微比较长的响应时间

  • (BOOL)connectToHost:(NSString*)host onPort:(uint16_t)port error:(NSError **)errPtr
    {
    return [self connectToHost:host onPort:port withTimeout:5 error:errPtr];
    }

3.Error Domain=GCDAsyncSocketErrorDomain Code=51,网络断开,可以检查一下网络连接状态

4.Error Domain=NSPOSIXErrorDomain Code=61 "Connection refused" UserInfo=0x7b288750 {NSLocalizedFailureReason=Error in connect() function, NSLocalizedDescription=Connection refused}
服务器没启动,或者端口没开启。

相关文章

  • socket通信 的一些坑

    因为项目中用用到socket通信 实现夸平台的局域网实时通信。下面罗列一些我在使用过程中遇见错误和我的处理方式:一...

  • 最简单的Java网络编程实例(BIO、NIO、Netty版本对比

    最简单的BIO代码 通过Socket通信,服务端使用ServerSocket最后也是获得socket。这里有一个坑...

  • Kotlin网络编程(3)TCP Socket 低层次网络编程

    TCP Socket 通信概念TCP Socket 通信过程Socket 类ServerSocket 类案例:文件...

  • Go语言之三 Socket通信

    socket通信是最基本的一种进程通信方式,要掌握socket通信就需要知晓socket通信的行为语义。 这里go...

  • Socket 通信 知识梳理

    1.socket是网络通信的一项技术,android的socket通信其实使用的是java的socket通信技术。...

  • 5.0.3.Socket

    Socket(网络套接字)是网络编程提供的一种机制,通信的两端都要有socket,网络通信就是socket通信数据...

  • CocoaAsyncSocket --Socket学习

    Socket理论 套接字(Socket)概念 套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信...

  • 网络基本

    网络通信的要素 socket通过socket来建立连接,然后通信 IP -- Internet Protocol网...

  • 知识点

    关于Socket通信:客户端通过new Socket()方法创建通信的Socket对象服务器端通过new Serv...

  • 2021-09-25 网络编程(Socket)

    1.Socket就是为网络服务提供的一种机制2.通信的两端都有Socket3.网络通信其实就是Socket间的通信...

网友评论

      本文标题:socket通信 的一些坑

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