发 帖  
原厂入驻New
[问答] 为什么STM32 LWIP服务器模式无法重复连接?
146 LwIP 服务器 STM32
分享
问题是这样的,我使用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)操作,不懂是不是还少了啥!!求大神们解答~~实在是郁闷,到底少了啥操作!!
0
2019-11-3 19:26:08   评论 分享淘帖 邀请回答

相关问题

21个回答
发现这里有说,看样子还真的是这个
http://blog.sina.com.cn/s/blog_62a85b950101aw93.html
2019-11-4 04:48:05 评论

举报

不懂。。。。顺便问下,看了原子哥的例程    想问下移植lwip的时候  可以用lwip自带的内存分配函数而不用移植malloc吗?
2019-11-4 05:04:13 评论

举报

我是两个都仍进去了~~
2019-11-4 05:37:42 评论

举报

2019-11-4 05:54:21 评论

举报

2019-11-4 06:10:50 评论

举报

2019-11-4 06:30:45 评论

举报

虽然帮不到楼主 但我也在纠结过lwip  C/S各种连不上  各种不稳定  后来项目组用的是w5200,直接内置协议栈
2019-11-4 06:40:08 评论

举报

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

举报

原因视频里有讲,但我实在记不住哪一讲了。
2019-11-4 06:58:59 评论

举报

哪个视频?lwip的视频一大堆!
2019-11-4 07:09:46 评论

举报

参考下我们综合 实验的代码,综合实验没有这个问题。 你直接测试综合实验的网络通信功能即可。
2019-11-4 07:28:02 评论

举报

你们那综合实验代码哪里下载?
2019-11-4 07:38:34 评论

举报

我也不记得哪个视频啊,或者你自己写点代码限制,我自己也是这样做,不然对于client那种高并发的请求会无法处理。现在的浏览器都是高并发的,特别是opera。
2019-11-4 07:47:30 评论

举报

网络实验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分钟
我的代码不是原子的,跟你的有点不一样,不过我看了下你这代码,我发现我这里也做了memp_free()的处理。你说会等待一分钟,我还真没注意到,不知道我这边会不会这样,我试下,如果要等待一段时间,问题也不大。
2019-11-4 08:13:40 评论

举报

你有tcp_pcb_purge吗???
2019-11-4 08:25:22 评论

举报

我是参考这个代码写的,我发现里面没用到tcp_pcb_purge金龙107_  LWIP_TCP  server.zip (7.92 MB )
2019-11-4 08:38:02 评论

举报

我是参考下面这个金龙107_ LWIP_TCP server代码写的,我发现里面没用到tcp_pcb_purge
2019-11-4 08:49:26 评论

举报

只有小组成员才能发言,加入小组>>

12下一页

55个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

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