当前位置:首页 > 知识经验 > 正文内容

优化了C# ClientSocket长连接处理

作者: 葛屹肃 | 日期: 2023-05-21 | 分类: 知识经验

近日,主要工作为开发一款安卓版APP,功能已基本实现。昨天去客户现场进行测试,又发现一个BUG,就是Socket连接不稳定,常出现与服务器连接断开的现象。

优化了C# ClientSocket长连接处理

其实,这是个历史遗留下的问题,之前的使用WIN CE系统的PDA时,程序是由供应商提供的,客户也常反馈PDA偶尔会出现连接断开现象,每次出现这种情况,只能返回主茶单,再进入功能菜单,等同于重新发送请求。

前2年已花费购买向供应商购买了源码,由于这种情况对于操作影响不大,而且出现频率不高,因此SOCKET通讯这一块一直没有改动。

而这次自己开发的APP,是由于换了PDA,新款PDA改为安卓系统,这个是趋势,因此,要开发一款功能跟之前WIN CE系统PDA一样的功能的APP。

开发工具依然是Microsoft Visual Studio,只是版本从2010提升为2019,VS2019可使用Xamarin进行Andriod APP的开发。

虽然使用工具一样,而开发语言也是C#,但是Andriod与WIN CE系统的功能处理是完全不一样的,而且基于Xamarin Andriod资料很少,处理一个问题点往往要花很少时间。之前发表《C# Xamarin开发APP项目问题汇总》文章,以后会将其解决方式分享出来。

分析过供应商的ClientSocket判断连接断开的逻辑很混乱,经常自己测试后,发现其判断连接断开只有一个方式是有效,那就是在线程中读写数据,当返回数据长度为0或出现异常,就是与服务器连接断开。

我在此基础上,加上心跳处理,即每3秒发一个心跳包,如果2次没有接收到数据,即判断为与服务连接断开。

总结:经改善后,C#客户端的Socket判断连接断开的方式,一是读写数据线程中,返回数据长度为0或出现异常,二是发心跳包,出现2次没有接到数据。

此改善在本机测试正常,等过几天去客户那边更新APP再测试一下效果。

版权声明:本文由〖葛屹肃〗发布,转载请注明出处!
文章链接:https://www.geyisu.com/3117.html

  • 评论:(0)

已有 0 位网友发表了一针见血的评论,你还等什么?

◎欢迎大家参与讨论