关于CocoaAsyncSocket接收不到消息的问题

梁丘琛
2023-12-01

使用CocoaAsyncSocket过程中碰到不回调接收消息的函数

- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag

原因是[_tcpSocket readDataWithTimeout:5 tag:tag];这个函数的执行问题 

首先从字面意思上看这个方法的作用像是(读? or 接收?)消息超时的设置方法.而且网上很多文章都是推荐写在didReadData这个回调函数里的.

理了下思路 结果是 每次执行读数据前(didReadData)都得 执行readDataWithTimeout设置方法。didReadData回调才会被执行。

经过多次试验后 发现 readDtaWithTimeout:A tag:tag  A参数的时间是表示断开socket连接的时间 也就是说这个方法的作用是设置断开socket连接的时间长度。

这时候我想起之前有一个情况就是 我如果只是建立连接 但不发送消息 socket连接不会中断。但是如果发送了数据之后就会在某个时间断开 这应该就是readDataWithTimeout在发挥作用了。

但是不理解啊 为什么要每次都设一遍呢 就去看了看tpc连接的流程

这篇文章看到一个说法 https://www.jianshu.com/p/cc756016243b 

TCP连接的关闭:发送方主机和接收方主机在建立连接并完成数据传输后会发送一个将结束标记置1的数据包,用以关闭连接,并释放该连接占用的缓冲区空间

这或许就是为什么每次传输数据都要设置的原因吧 。。。。。写着写着有多了许多疑问。 再看看资料再继续写。

 类似资料: