1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
硬件: 战舰V3板子;
软件:网络实验8 NETCONN_TCP客户端,基础上修改。 if((tcp_client_flag & LWIP_SEND_DATA) == LWIP_SEND_DATA) //有数据要发送 { printf("rn心跳包rn",i_SendCount); err = netconn_write(tcp_clientconn ,tcp_client_sendbuf,strlen((char*)tcp_client_sendbuf),NETCONN_COPY); //发送tcp_server_sentbuf中的数据 if(err != ERR_OK) { printf("发送失败rn"); } tcp_client_flag &= ~LWIP_SEND_DATA; } 在其他任务中定时10秒往服务器发送一个以上数据,用作心跳包。 问题: 在运行一段时间后,心跳包就不往服务器发送了。其他任务也都还在运行,串口信息也有打印 出来。 在串口信息打印中,也有“心跳包”打印,没有“发送失败”打印。 目前我也不知道是什么原因,运行时间不固定,大概五分钟到二十几分钟不等,就会出现心跳包不往服务器发送。 请教有什么办法可以解决这个问题。 我现在有做心跳包发送次数达到10条服务器没有回复的话,就直接断开连接,然后再重新连接。但这样总不是办法。 |
|
相关推荐
4个回答
|
|
tcp是可靠的连接,但服务器和客户端都有相应的超时机制的,当超过一段时间服务器没有收到数据,是会断掉连接的,你只能重新连接,你不能根据是否有回复判断是客户端还是服务端问题(从你这现象看服务器可能性更大),用whireshark抓下包你才能知道是哪端的问题。你这个成立的前提是服务器实现tcp长连接,需要服务器和客户端的共同支持,如果不能控制服务器, 老老实实用:
netconn_connect -> netconn_write -> netconn_close流程做心跳包吧 |
|
|
|
|
|
|
|
你还没有理解分层和tcp连接的含义,ping是icmp协议,是网络层的,只能证明服务器和客户端的网络是通的,不代表你当前的tcp连接没有断开。你每10s发送一次能够成功返回,是建立在你通过netconn_connect建立起的一次连接长时间保持的基础上的,如果服务端主动断开了这次连接,客户端就不会有回复了,这不是需要长连接吗?所以要不然改服务器,无法改的话就用短连接做心跳包,我给个短连接的流程,你比较下就知道差别了。
长连接: netconn_connet -> netconn_write ...delay -> ..... -> netconn_write ... delay (一般由服务器关闭连接) 短连接: netconn_connet -> netconn_write -> netconn_close ... delay ->...... netconn_connet -> netconn_write -> netconn_close ...delay |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2569 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2365 浏览 5 评论
3210 浏览 3 评论
2837 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2789 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
668浏览 1评论
905浏览 0评论
1026浏览 0评论
671浏览 0评论
499浏览 0评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 08:43 , Processed in 1.032426 second(s), Total 52, Slave 46 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号