LwIP的TCP客户端先于服务端启动情况下,无法正常连接服务器端的解决办法

本文探讨了在特定应用场景下,使用LwIP协议栈的客户端如何解决服务器端后启动导致的连接问题。通过定时检查TCP连接状态并发送ARP请求包,确保客户端能够在服务器端随机上电的情况下成功建立连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在某项目的应用场景下,使用LwIP协议栈的板卡作为客户端。通常,客户端启动后,会主动执行两个初始步骤:
A.首先发送一次ARP请求包,其目的IP地址为服务器端的IP地址;
B.接着执行TCP客户端初始化函数,尝试进行三次握手流程。

服务器端的启动存在两种情况:
情况1:服务器端先于客户端启动
在该情况下,服务器端会立即响应客户端执行的初始步骤A、B,客户端将正常连接将服务器端;
情况2:服务器端后于客户端启动,或服务器端在TCP连接正常的情况下突然断电再上电;
在该情况下,服务器端后于客户端启动,由于客户端不再执行上述两个步骤A、B,则客户端将永远无法连接上服务器端。

项目应用场景下正常使用流程是作为客户端的板卡会优先启动,服务端是根据实时需求随机开关电。因此应用场景属于情况2。

因此,对于情况2板卡客户端需要额外定时执行两个步骤:
步骤1:
查询当前TCP连接状态,若未连接则执行TCP客户端初始化函数尝试重新连接;
步骤2:
由于服务器端可能后于客户端上电,且上电后并不会主动定时发送包含自身MAC地址的ARP响应包,所以需要客户端节点主动周期发送ARP请求包,该包中请求的目的地址就是服务器端的IP地址。

通过上述两个步骤,即可保证在服务器端后上电且不会主动发送自身MAC地址信息的条件下,实现客户端在服务器端随机上电的情况下正常连接上服务器端。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weekman93

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值