中级会员
 
- 积分
- 215
- 金钱
- 215
- 注册时间
- 2012-7-26
- 在线时间
- 31 小时
|
10金钱
本帖最后由 北宸xyz 于 2018-1-2 21:04 编辑
硬件: 战舰V3板子;
软件:网络实验8 NETCONN_TCP客户端,基础上修改。
if((tcp_client_flag & LWIP_SEND_DATA) == LWIP_SEND_DATA) //有数据要发送
{
printf("\r\n心跳包\r\n",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("发送失败\r\n");
}
tcp_client_flag &= ~LWIP_SEND_DATA;
}
在其他任务中定时10秒往服务器发送一个以上数据,用作心跳包。
问题:
在运行一段时间后,心跳包就不往服务器发送了。其他任务也都还在运行,串口信息也有打印 出来。
在串口信息打印中,也有“心跳包”打印,没有“发送失败”打印。
目前我也不知道是什么原因,运行时间不固定,大概五分钟到二十几分钟不等,就会出现心跳包不往服务器发送。
请教有什么办法可以解决这个问题。
我现在有做心跳包发送次数达到10条服务器没有回复的话,就直接断开连接,然后再重新连接。但这样总不是办法。
|
最佳答案
查看完整内容[请看2#楼]
tcp是可靠的连接,但服务器和客户端都有相应的超时机制的,当超过一段时间服务器没有收到数据,是会断掉连接的,你只能重新连接,你不能根据是否有回复判断是客户端还是服务端问题(从你这现象看服务器可能性更大),用whireshark抓下包你才能知道是哪端的问题。你这个成立的前提是服务器实现tcp长连接,需要服务器和客户端的共同支持,如果不能控制服务器, 老老实实用:
netconn_connect -> netconn_write -> netconn_close流程做 ...
|