完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
本帖最后由 Katrina_WIZnet 于 2015-9-2 14:50 编辑 大家是否遇到过这样的问题,W5500作为服务器已经建立连接,突然网线掉了,然后再去连接W5500,就连不上了。为什么?下面对这个问题进行解释说明,并提出解决办法。 图1中的上位机程序作为客户端,连接W5500服务器。 图2是对这个问题的wireshark抓包说明。其中192.168.11.114为W5500的IP,192.168.11.110为PC的IP。下图中的第48个包是第一次握手:建立连接时,客户端发送SYN包到服务器,等待服务器确认;第49个包为第二次握手:服务器收到SYN包,必须确认客户的SYN同时自己也发送一个SYN包,即SYN+ACK包。第50个包为第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。在第70个包中显示,PC向W5500发送9个字节数据,在第73个包中,W5500向PC发送9个字节数据。此时,突然拔掉网线,并点击图1 “Disconnect”按钮,图1中的第160个包显示的是PC发送FIN+ACK包,第161包,W5500发送应答。然后连上网线,并且点击图3的“connect”,但是无法连接。 这是因为,网线没掉之前,W5500处于SOCK_ESTABLISHED状态,此时突然拔掉网线,SOCKET状态没变,还是SOCK_ESTABLISHED状态,没有监听,所以无法再次连接。
图1 wireshark抓包
图2 上位机建立连接
图3 网线掉了,再插上网线连接不上 解决方法: Sn_KPALVTR寄存器配置了socket n 的keep-alive包传输时间间隔。只在TCP模式下生效,单位时间为5秒。Keep-alive包会在Sn-SR 寄存器变为SOCK_ESTABLISHED之后,且与对方至少进行过一次收或发的通信后进行传输。如果Sn_KPALVTR>0,W5500在设置的时间间隔后自动传输keep-alive包以检查TCP的连接状态(自动在线检验),如果对方不能在超时计数期内反馈keep-alive包,这个连接将会被关闭并触发超时中断。如果‘Sn_KPALVTR = 0’,将不会启动自动在线验证,主机可以通过向寄存器Sn-CR写入SEND_KEEP命令发送keep-alive包(手动在线验证)。在‘Sn_KPALVTR> 0’时,将会无视手动在线验证。 自动检验:只需在主函数中,向寄存器Sn_KPALVTR写入不为0的数,即可启动自动在线检验。在函数中写入下面的函数,那么在W5500与对方进行过一次数据通信后,10秒后W5500自动发送keep-alive包。 例如:voidsetkeepalive(SOCKET s) { IINCHIP_WRITE(Sn_KPALVTR(s),0×02); } Wireshark抓包如图4 1-3包是三次握手过程,5-10包是发送和接收数据的过程,19包是W5500向PC发送keep-alive包,20包是PC对keep-alive包的应答。10秒之后,即是第30包,W5500又发送一次keep-alive包。此时拔掉网线,点击“Disconnect”。10秒之后,W5500发送的keep-alive包没有反应,SOCKET关闭。然后连上网线,点击“Connect”按钮,可以重新建立连接,109-111包是第二次建立连接过程。
图4 启用keep-alive后可以重新建立连接 以上演示的是自动发送keep-alive包的过程,如果想手动发送keep-alive包,把Sn_KPALVTR寄存器写入0,当向Sn-CR写入SEND_KEEP命令时,W5500发送一次keep-alive包。 voidsend_ka(SOCKET s) { IINCHIP_WRITE(Sn_CR(s),Sn_CR_SEND_KEEP); return; } By Catherine 程序请参考附件(IAR版本)。Keil版本请参考TCP_Server程序包。 如有任何问题,请联系:wiznetbj@wiznet.co.kr
|
|
相关推荐
14 个讨论
|
|
|
ok,程序不错。是keil更好。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
谢谢讲解 很有帮助
|
|
|
|
|
|
|
|
|
谢谢分享
|
|
|
|
|
|
|
|
|
谢谢分享
|
|
|
|
|
|
|
|
|
OK,程序不错
|
|
|
|
|
|
|
|
|
是KEIL
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
549个成员聚集在这个小组
加入小组7130 浏览 0 评论
7594 浏览 0 评论
5367 浏览 1 评论
13118 浏览 5 评论
3865 浏览 2 评论
9519浏览 1评论
使用stm32,通过spi的dma 收发,运行多次读写以后w5500发送正常,接收卡死,高人帮忙看看
14782浏览 1评论
w5500 作为tcp server,客户端异常发送【RST,ACK】断开连接问题
15990浏览 1评论
7144浏览 0评论
7611浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-8 17:37 , Processed in 0.831467 second(s), Total 67, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1213