OpenEdv-开源电子网

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

STM32 LWIP服务器模式 无法重复连接~~

[复制链接]

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
发表于 2016-7-24 15:16:22 | 显示全部楼层 |阅读模式
20金钱
问题是这样的,我使用LWIP建立了一个服务器,然后我设置这个服务器只能让一个客户端连接进来,设置如下
tcp_listen_with_backlog(tcp_echoserver_pcb, TCP_LISTEN_BACKLOG);
其中TCP_LISTEN_BACKLOG就是允许的客户端连接数,我TCP_LISTEN_BACKLOG设置成了1,然后我用网络调试助手在进行第一次连接后,能和板子通信上,数据收发啥的都很正常,接着我主动断开了客户端,再次尝试连接到板子,就连接不上去了。如果我把TCP_LISTEN_BACKLOG设置成2,问题也是一样的,正常连接2次后,第三次也是无法连接,所以我怀疑是不是在我客户端断开连接后,服务器少做了什么操作,类似于释放什么资源,或关闭套接字啥的,我程序里面只做了tcp_close(tpcb)操作,不懂是不是还少了啥!!求大神们解答~~实在是郁闷,到底少了啥操作!!


最佳答案

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

发现这里有说,看样子还真的是这个 http://blog.sina.com.cn/s/blog_62a85b950101aw93.html
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
 楼主| 发表于 2016-7-24 15:16:23 | 显示全部楼层
回复

使用道具 举报

4

主题

21

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2016-7-10
在线时间
15 小时
发表于 2016-7-24 15:24:52 | 显示全部楼层
不懂。。。。顺便问下,看了原子哥的例程    想问下移植lwip的时候  可以用lwip自带的内存分配函数而不用移植malloc吗?
回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
 楼主| 发表于 2016-7-25 08:34:17 | 显示全部楼层
ctwillson 发表于 2016-7-24 15:24
不懂。。。。顺便问下,看了原子哥的例程    想问下移植lwip的时候  可以用lwip自带的内存分配函数而不用移 ...

我是两个都仍进去了~~
回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
 楼主| 发表于 2016-7-26 10:52:37 | 显示全部楼层
没人会么?
回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
 楼主| 发表于 2016-7-27 10:09:54 | 显示全部楼层
没人知道么?
回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
 楼主| 发表于 2016-7-29 10:18:56 | 显示全部楼层
没人知道么?
回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
 楼主| 发表于 2016-7-29 13:49:09 | 显示全部楼层
没人会么?
回复

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2016-7-28
在线时间
7 小时
发表于 2016-7-29 15:31:12 | 显示全部楼层
虽然帮不到楼主 但我也在纠结过lwip  C/S各种连不上  各种不稳定  后来项目组用的是w5200,直接内置协议栈
回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
 楼主| 发表于 2016-7-29 15:58:24 | 显示全部楼层
HXT 发表于 2016-7-29 15:31
虽然帮不到楼主 但我也在纠结过lwip  C/S各种连不上  各种不稳定  后来项目组用的是w5200,直接内置协议栈{ ...

我不是连不上不稳定的问题,我程序在连接的时候很稳定,我要求是设置只允许一个客户端去连接,也就是说当A客户端连接的时候B客户端无法连接,或者当B客户端连接的时候A客户端无法连接,就是这样。
我现在是当A客户端断开后,按需求是B要能连接上,可实际情况是A断开后,A和B都连接不上去,所以我敢说很大的可能是服务器没释放掉某个状态标识或资源啥的,导致A断开后,服务器依然认为当前连接数已经达到设定值,不允许新的客户端连接。从而导致A和B都连接不上去。
问题就在于,在A断开连接后,如何让服务器中的各种状态恢复到初始值?除了tcp_close外,还要释放啥东西?
回复

使用道具 举报

19

主题

430

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1341
金钱
1341
注册时间
2016-4-22
在线时间
187 小时
发表于 2016-7-29 17:08:56 | 显示全部楼层
原因视频里有讲,但我实在记不住哪一讲了。
伤情最是晚凉天,憔悴斯人不堪怜。
邀酒摧肠三杯醉,寻香惊梦五更寒。
钗头凤斜卿有泪,荼蘼花了我无缘。
小楼寂寞新雨月,也难如钩也难圆。
回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
 楼主| 发表于 2016-7-29 17:29:34 | 显示全部楼层
ysq7120 发表于 2016-7-29 17:08
原因视频里有讲,但我实在记不住哪一讲了。

哪个视频?lwip的视频一大堆!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2016-7-29 19:58:21 | 显示全部楼层
参考下我们综合 实验的代码,综合实验没有这个问题。 你直接测试综合实验的网络通信功能即可。
回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
 楼主| 发表于 2016-7-29 22:24:17 | 显示全部楼层
正点原子 发表于 2016-7-29 19:58
参考下我们综合 实验的代码,综合实验没有这个问题。 你直接测试综合实验的网络通信功能即可。

你们那综合实验代码哪里下载?
回复

使用道具 举报

19

主题

430

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1341
金钱
1341
注册时间
2016-4-22
在线时间
187 小时
发表于 2016-8-1 09:22:54 | 显示全部楼层
我也不记得哪个视频啊,或者你自己写点代码限制,我自己也是这样做,不然对于client那种高并发的请求会无法处理。现在的浏览器都是高并发的,特别是opera。
伤情最是晚凉天,憔悴斯人不堪怜。
邀酒摧肠三杯醉,寻香惊梦五更寒。
钗头凤斜卿有泪,荼蘼花了我无缘。
小楼寂寞新雨月,也难如钩也难圆。
回复

使用道具 举报

19

主题

430

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1341
金钱
1341
注册时间
2016-4-22
在线时间
187 小时
发表于 2016-8-1 09:52:01 | 显示全部楼层
网络实验5 RAW_TCP服务器实验
//强制删除TCP Server主动断开时的time wait
void tcp_server_remove_timewait(void)
{
        struct tcp_pcb *pcb,*pcb2;
        u8 t=0;
        while(tcp_active_pcbs!=NULL&&t<200)
        {
                lwip_periodic_handle();        //继续轮询
                lwip_pkt_handle();
                t++;
                delay_ms(10);                        //等待tcp_active_pcbs为空  
        }
        pcb=tcp_tw_pcbs;
        while(pcb!=NULL)//如果有等待状态的pcbs
        {
                tcp_pcb_purge(pcb);
                tcp_tw_pcbs=pcb->next;
                pcb2=pcb;
                pcb=pcb->next;
                memp_free(MEMP_TCP_PCB,pcb2);       
        }
}

应该要删除这个就行了。不然一直等待,好像会等1分钟
伤情最是晚凉天,憔悴斯人不堪怜。
邀酒摧肠三杯醉,寻香惊梦五更寒。
钗头凤斜卿有泪,荼蘼花了我无缘。
小楼寂寞新雨月,也难如钩也难圆。
回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
 楼主| 发表于 2016-8-2 11:01:18 | 显示全部楼层
ysq7120 发表于 2016-8-1 09:52
网络实验5 RAW_TCP服务器实验
//强制删除TCP Server主动断开时的time wait
void tcp_server_remove_timew ...

我的代码不是原子的,跟你的有点不一样,不过我看了下你这代码,我发现我这里也做了memp_free()的处理。你说会等待一分钟,我还真没注意到,不知道我这边会不会这样,我试下,如果要等待一段时间,问题也不大。
回复

使用道具 举报

19

主题

430

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1341
金钱
1341
注册时间
2016-4-22
在线时间
187 小时
发表于 2016-8-3 08:20:19 | 显示全部楼层
你有tcp_pcb_purge吗???
伤情最是晚凉天,憔悴斯人不堪怜。
邀酒摧肠三杯醉,寻香惊梦五更寒。
钗头凤斜卿有泪,荼蘼花了我无缘。
小楼寂寞新雨月,也难如钩也难圆。
回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
 楼主| 发表于 2016-8-3 09:12:31 | 显示全部楼层
我是参考这个代码写的,我发现里面没用到tcp_pcb_purge

金龙107_ LWIP_TCP server.zip

7.92 MB, 下载次数: 144

回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
 楼主| 发表于 2016-8-3 09:13:04 | 显示全部楼层
ysq7120 发表于 2016-8-3 08:20
你有tcp_pcb_purge吗???

我是参考下面这个金龙107_ LWIP_TCP server代码写的,我发现里面没用到tcp_pcb_purge
回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
 楼主| 发表于 2016-8-3 09:14:37 | 显示全部楼层
ysq7120 发表于 2016-8-3 08:20
你有tcp_pcb_purge吗???

可能就是缺了这个吧!!晚上回去看看!!
回复

使用道具 举报

14

主题

219

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2014-4-14
在线时间
76 小时
 楼主| 发表于 2016-8-3 20:15:30 | 显示全部楼层
ysq7120 发表于 2016-8-1 09:52
网络实验5 RAW_TCP服务器实验
//强制删除TCP Server主动断开时的time wait
void tcp_server_remove_timew ...

我看了下我的代码,我调用tcp_close(),tcp_close()又调用了tcp_pcb_remove(),tcp_pcb_remove()里面和网上那个一样,tcp_pcb_purge()包含在其中了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 22:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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