OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4066|回复: 3

lwip 掉线检测

[复制链接]

7

主题

20

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-4-16
在线时间
15 小时
发表于 2016-12-17 11:06:48 | 显示全部楼层 |阅读模式
1金钱
      STM32F107 + LWIP ,107做服务器端与电脑通讯,有一个问题搞不懂:在通讯建立后,可以正常通讯,客户端连接或断开连接,,LWIP中的tcp_pcb->state 的状态上会更新的,显示已建立连接(0x04)或关闭(0x00),但建立通讯后,拔掉网线,tcp_pcb->state 的状态一直不会更新,仍显连接状态(0x04).
     我本意是在107主动发数据之前,先检查是否已和客户端连接上再发数据,但 tcp_pcb->state 的状态不正确,不知该如何处理,大伙支个招。

最佳答案

查看完整内容[请看2#楼]

tcp不管是连接还是断线都需要有握手机制,连接的时候是三次握手,正常掉线的时候是四次握手,在正常情况下,关闭握手都是有关闭的一方发起的,比如我的客户端要关闭,那么客户端会发送一个请求告诉服务器"我要关闭了"(第一个握手),然后服务器收到这个请求后回应一个响应给客户端"我受到了你的关闭请求"(第二次握手),然后然后再给客户端一个请求"既然你要关闭,那我也关闭吧"(第三次握手),客户端受到了服务器发送过来的关闭请求后, ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

64

帖子

3

精华

高级会员

Rank: 4

积分
768
金钱
768
注册时间
2014-3-11
在线时间
55 小时
发表于 2016-12-17 11:06:49 | 显示全部楼层
tcp不管是连接还是断线都需要有握手机制,连接的时候是三次握手,正常掉线的时候是四次握手,在正常情况下,关闭握手都是有关闭的一方发起的,比如我的客户端要关闭,那么客户端会发送一个请求告诉服务器"我要关闭了"(第一个握手),然后服务器收到这个请求后回应一个响应给客户端"我受到了你的关闭请求"(第二次握手),然后然后再给客户端一个请求"既然你要关闭,那我也关闭吧"(第三次握手),客户端受到了服务器发送过来的关闭请求后,返回一个响应给服务器"我收到了你的关闭请求"(第四次握手),然后客户端关闭自己这一段的连接,服务器这一侧受到了客户端的关闭响应后也关闭自己这一侧的连接,至此服务器和客户端完全断开。而异常断线(拔网线或者突然断电)时以上的过程是没有时间和条件完成的所以此时的tcp连接只是单方面的断开,即所谓的假链接,单纯的tcp协议是无法完全解决这种事情的,所以我们通常使用心跳包来消除假链接或者说异常断线的情况。 181351206012825.png
回复

使用道具 举报

7

主题

20

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-4-16
在线时间
15 小时
 楼主| 发表于 2016-12-20 15:49:28 | 显示全部楼层
感谢楼上详细解析,明白了!
心跳包是怎样的概念?
回复

使用道具 举报

6

主题

64

帖子

3

精华

高级会员

Rank: 4

积分
768
金钱
768
注册时间
2014-3-11
在线时间
55 小时
发表于 2016-12-20 16:37:26 | 显示全部楼层
powerwjc 发表于 2016-12-20 15:49
感谢楼上详细解析,明白了!
心跳包是怎样的概念?

心跳包是双方预先约定好的一个数据,比如服务器为了监测客户端是否在线,会定期的发送一个数据包,比如约定好5min钟发送一个0xFF代表心跳数据,同时规定客户端收到了心跳包后必须回应一个心跳回应,比如为0xFE,这些东西都是事先服务器和客户端约定好的。那么如果在通讯正常的情况下,服务器每5min发送一次0xFF后,必然会收到一次客户端发送的0xFE的响应。当某一时刻,服务器发送了0xFF后发现在超时时间内无法收到0xFE的响应,那说明什么?说明要么客户端收不到0xFF的心跳,要么客户端发送的0xFE服务器无法收到,这两种情况均是异常情况,所以此时服务器就可以判断客户端掉线了。这就是心跳机制。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-9 02:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表