lwip1.3.2+ucosII服务器与浏览器连接问题bug解决

最近利用lwip1.3.2+ucosII在stm32f207搭建了web服务器,实现功能并不容易,但最难的却是功能实现之后查找bug的过程,这个过程可以说相当辛苦,但经历了这些我发现我也学习成长了很多,这里主要分享下我遇到的bug,以及解决方式,首先说明下我搭建的服务器带基本认证服务。
1. phy驱动初始化问题
   因为stm32f207中引脚问题我的项目只能采用RMII总线,这时就需要修改默认系统时钟需要修改为100MHZ(见system_stm32f2xx.c)。
          
     参考DP83848的CLK说明,可以知道输入管脚CLK(端口PA8)的时钟要为50MHZ,PA8位于APB2区域,在参考system_stm32f2xx.c中程序,PCLK = SYSCLK/2
         
    可知系统时钟需要配置到100MHZ,如果系统时钟达不到100MHZ,如STM32F107,则需要使用MII总线。
    2. 在某些浏览器在初次登录会弹出两次登录框体(如遨游),且有时会卡死服务器
 通过WireShark软件抓包分析,几乎所有浏览器在请求完一张完整网页后会继续请求favicon.ico(网站头像,如下),用于放置在地址栏或者收藏夹的首位,且有时该请求报会不附带用户的认证信息,因为它并不存在于服务器端用户设计的网页中(一般情况下),因此客户端可能会一直请求,造成服务器卡顿,因此在服务器的http层代码中要对该请求独立出来处理。
          
  3 .win7+IE8访问服务器是偶尔会卡死
  win7+IE8访问服务器时,当缓存已经有图片时,会发送[RST, ACK] TCP包
  
  目前我所用的版本的lwip的tcp层对于该数据报的处理并不好,我测试了下,接收到RST,ACK包必卡死
  经过仔细排查,我发现了问题关键,在处理[RST ACK]复位包的回调函数中err_tcp中,将连接的conn->err 置成了ERR_RST,
  而在线程中调用的netconn_accept()和netconn_delete()并未修改这个参数,而在http层处理函数中将conn->err作为判断接收数据的一个标准,从而导致再也接不到数据。
  因此在复位连接处理完毕(即在err_tcp)末尾后要添加conn->err = ERR_OK,不知道是不是lwip的内在缺陷。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值