OpenEdv-开源电子网

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

懂LWIP看过来,ucos下lwip服务器的问题。

[复制链接]

2

主题

9

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2015-6-23
在线时间
3 小时
发表于 2015-7-20 20:42:33 | 显示全部楼层 |阅读模式
5金钱
项目进行快两个月了,任务很急,但是卡在了LWIP这块。下面我仔细描述一下,我要实现的功能和遇到的问题。

相关硬件配置:stm32f407   lan8720A
软件:ucos 2.9(原子哥移植好的) lwip1.4协议栈(原子哥移植好的)         ;
         fatfs       usbHost  (和这里遇到的问题没什么关系)
功能上:我只说局部功能吧,用lwip的NETCONN接口实现一个TCP服务器(参照原子哥的例程,只能同时服务与一个客户端的SERVER),然后java的TCP客户端连接板子的服务器,发送base64加密的数据。板子的服务器接收到数据之后,解密,解包(解析XML),处理。  同时板子也是客户端,发送数据时,连接java服务器,发送完成后,关闭套接字。其实,整个模型是 双服务的。

那么问题来了!
    板子的应用层代码是没有问题的(因为之前测试过,可以使用),现在有这样的情况,java发来第一包数据,我的板子(TCP服务器)处理完成之后,就会死机。于是,我查看打印信息,我发现,java的客户端连接没有断开,此时,又会有java的客户端连接过来,系统死机(java的客户端也是,单线程发送数据的,中间有延时,发送完成之后,断开连接)。接着,我用网络调试助手测试,结果发现:点击连接,断开时,板子服务器没有问题,但是,点击连接,然后发送数据,关闭连接(模拟java客户端),连续几次之后,系统就会死机。所以,我怀疑,是不是原子哥移植的LWIP是不是有问题?或者是我自己重新配置的lwipopts.h有问题(其实也没怎么改),希望大神来帮助!!!如果懂LWIP的大神帮我,我可以给出代码。
                                                                                                                                              本人QQ:653781964


tcp_server.c
lwipopts.h
app_thread.c(提供了在线检测网络状态的方法,可供网线热插拔,分享给大家)
已上传




lwipopts.h

4.59 KB, 下载次数: 481

tcp_server_demo.c

6.52 KB, 下载次数: 265

tcp_server_demo.h

834 Bytes, 下载次数: 489

app_thread.h

346 Bytes, 下载次数: 464

app_thread.c

10.04 KB, 下载次数: 553

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165426
金钱
165426
注册时间
2010-12-1
在线时间
2113 小时
发表于 2015-7-20 21:46:35 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-7-20 23:19:19 | 显示全部楼层
我们给出的netconn的服务器只能连接一个客户端,不能连接多个客户端的,你需要自行设计并发服务器。
开往春天的手扶拖拉机
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2015-6-23
在线时间
3 小时
 楼主| 发表于 2015-7-21 13:11:30 | 显示全部楼层
回复【3楼】zuozhongkai:
---------------------------------
服务器模型,我不需要改,客户端是在一个线程中发送数据的,发送完成断开连接。现在问题是,板子服务器接收数据会死机,任务堆栈已经是2000*4B了
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2015-6-23
在线时间
3 小时
 楼主| 发表于 2015-7-21 16:44:39 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
今天测试发现,第一次调用netconn_recv(newconn,&recvbuf)) 可以阻塞线程,第二次netconn_recv(newconn,&recvbuf))就无法阻塞线程
回复

使用道具 举报

28

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2013-7-25
在线时间
36 小时
发表于 2015-8-16 13:50:41 | 显示全部楼层
回复【5楼】daemon:
---------------------------------
楼主的问题解决了吗?   我最近也用到LWIP,移植的例程TCP服务端的程序,用网络调试助手调试,发现第一次连接比较正常,断开后 netconn_recv(newconn,&recvbuf)这个函数返回的还是ERR_OK,然后就死在HardFault_Handler中了。不知道问题和楼主遇到的问题是否一样。
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2015-6-23
在线时间
3 小时
 楼主| 发表于 2015-8-17 18:00:56 | 显示全部楼层
回复【6楼】二华子:
---------------------------------
你的netconn_recv(newconn,&recvbuf),netconn_accept(conn,&newconn)有超时吗?另外打断点看看是死在哪的
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2015-6-23
在线时间
3 小时
 楼主| 发表于 2015-8-17 18:03:00 | 显示全部楼层
回复【7楼】daemon:
---------------------------------
我之前是写flash的问题,lwip这几个api值得看看,改变参数试试。
回复

使用道具 举报

28

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2013-7-25
在线时间
36 小时
发表于 2015-8-19 20:33:04 | 显示全部楼层
回复【7楼】daemon:
---------------------------------
没有超时,在断开时netconn_recv(newconn,&recvbuf)的应该返回一个小于0的数,但是返回的是0,就进入接收读取,在读取的时候进入了硬件异常中断,就死了。有机会仔细研究研究LWIP
回复

使用道具 举报

33

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
587
金钱
587
注册时间
2015-1-9
在线时间
80 小时
发表于 2017-5-2 16:31:05 | 显示全部楼层
二华子 发表于 2015-8-19 20:33
回复【7楼】daemon:
---------------------------------
没有超时,在断开时netconn_recv(newconn,&recvbuf ...

马克一下,我很可能也遇到这种情况
君子性非异也,善假于物也
不知常,妄作,凶
纵浪大化中,不喜亦不惧,应尽便须尽,无复独多虑
路漫漫其修远兮,吾将上下而求索
菩萨畏因,凡夫畏果
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-9 01:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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