完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
TCP长连接,应用层有没有周期性的心跳包去确认网络连接状态呢
|
|
|
|
服务器主动断开连接应该会有Socket断开连接的URC消息上报的
|
|
|
|
我测试了,EC20确实有发出+QIURC: “closed”,0,AT socket也有处理,但是没有异常上报到应用层,所以应用层不知道连接已经断开了,下次发送数据就报错了。
|
|
|
|
既然AT socket已经处理了,那应用层就应该要有判断机制检查连接是否断开。你这个问题就是应用层的健壮性不够,没有考虑所有网络连接的可能性。
|
|
|
|
应用层是这样处理的,但是EC20的AT Socket在服务端断开连接后,recv里面仍然是阻塞的,没有等于0和小于0的异常返回值。 |
|
|
|
那你这个应该是没设置recv的最大阻塞时间,你看一下at_socket.c里面的at_recvfrom的实现
/* set AT socket receive timeout */ if ((timeout = sock->recv_timeout) == 0) { timeout = RT_WAITING_FOREVER; } else { timeout = rt_tick_from_millisecond(timeout); } |
|
|
|
1. 可以考虑使用心跳机制,定期发送心跳包,以检测服务器是否断开连接。
2. 可以考虑使用超时机制,设置一个超时时间,如果在超时时间内没有收到服务器的响应,则认为服务器已断开连接。 3. 可以考虑使用异常处理机制,当发生异常时,可以捕获异常,并进行相应的处理。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
1591 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1112 浏览 0 评论
1557 浏览 0 评论
1402 浏览 0 评论
1044 浏览 0 评论
74644 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 01:53 , Processed in 0.669414 second(s), Total 85, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号