socket closed by remote peer GCDAsyncsocket
发布日期:2021-06-29 11:52:33 浏览次数:2 分类:技术文章

本文共 1363 字,大约阅读时间需要 4 分钟。

在项目中用到GCDAsyncsocket,Mac端作为服务器,手机端作为客户端,在通信过程中,不定时出现以下错误:

error domain=gcdasyncsocketerrordomain code=7 socket closed by remote peer

排错

此错误一般由于服务端关闭而导致出错,出现此问题的一般排查步骤:

  • 服务端要将新连接的socket强引用,否则会出现此错误。

    @property (nonatomic, strong) NSMutableArray *socketsArray;- (void)viewDidLoad {    _socketsArray = [[NSMutableArray alloc] init];}- (void)socket:(GCDAsyncSocket *)sock didAcceptNewSocket:(GCDAsyncSocket *)newSocket {  [_socketsArray addObject:newSocket];  [newSocket readDataWithTimeout:-1 tag:0];}
  • 没有规律发送心跳或者心跳间隔过长。中有人尝试将心跳从10分钟改为5分钟之后解决了此错误,可参考。由于我7秒发送一次心跳,因此排除此可能性。

  • 是否使用相同的凭证从不同的客户端登录,并且在服务器设置中有这样的设置:如果有资源冲突,立即踢出另一个资源,在服务器>服务器设置>资源策略。

排查

经过排查,发现存在以下问题:

  1. socket的代理回调队列在主线程,会影响计时,超时从而导致出现此错误。
  2. 每个socket writeData之后应没有发送readDataWithTimeout,代理不再接收数据。
  3. 定时器用NSTimer或者PerformSelectAfter两种方式可能存在问题。

解决

  1. socket的代理回调队列放在子线程。

    //启动服务    _severPort = [OsxPortListHelper port];    _socketDelegateQueue = dispatch_queue_create("socket_delegate_queue", NULL);//注意成员变量引用,否则会释放    _serverSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:_socketDelegateQueue];    [_serverSocket acceptOnPort:_severPort error:nil];
  2. 每个socket writeData:之后应发送readDataWithTimeout:方法,告诉代理接收数据。

    [sock writeData:data withTimeout:-1 tag:0];[sock readDataWithTimeout:-1 tag:0];
  3. 定时器改用_sendHeartBeatTimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, _socketDelegateQueue);方式。

参考

转载地址:https://blog.csdn.net/zzl819954692/article/details/105664522 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Mac上基于Xcode 8.3.2, iOS 10.3(模拟器)搭建Appium 1.6.5 测试环境
下一篇:Mac通过aapt获取apk文件的基本信息

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月19日 01时27分52秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

「2020年大学生电子设计竞赛分享」电源题,省一等奖! 2019-04-29
又一国产开源微内核操作系统上线!源代码已开放下载 2019-04-29
10年老兵!从大学毕业生到嵌入式系统工程师的修炼之道…… 2019-04-29
如何才能学好单片机? 2019-04-29
一根网线有这么多“花样”,你知道吗? 2019-04-29
雷军1994年写的诗一样的代码,我把它运行起来了! 2019-04-29
2020年大学生电子设计竞赛,B题,单相在线式不间断电源,详细技术方案! 2019-04-29
大佬终于把鸿蒙OS讲明白了,收藏了! 2019-04-29
C语言指针,这可能是史上最干最全的讲解啦(附代码)!!! 2019-04-29
国内大陆有哪些芯片公司处于世界前10?一起看看! 2019-04-29
单精度、双精度、多精度和混合精度计算的区别是什么? 2019-04-29
中国35位“大国工匠”榜单出炉!西工大、西电合计占半壁江山!清华仅1人!... 2019-04-29
知乎热议:嵌入式开发中C++好用吗? 2019-04-29
2020,Python 已死? 2019-04-29
漫画:程序员相亲?哈哈哈哈哈哈 2019-04-29
30种EMC标准电路分享,再不收藏就晚了! 2019-04-29
这100道Linux常见面试题,看看你会多少? 2019-04-29
十年硬件老司机,结合实际案例,带你探索单片机低功耗设计! 2019-04-29
“2020年嵌入式软件秋招经验和对嵌入式软件未来的一点思考” 2019-04-29
嵌入式的坑在哪方面? 2019-04-29