OpenEdv-开源电子网

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

FreeRTOS+LWIP TCP Server Socket多客户端连接问题

[复制链接]

13

主题

296

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2066
金钱
2066
注册时间
2012-5-26
在线时间
291 小时
发表于 2016-2-23 23:30:13 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 lison0103 于 2016-2-23 23:32 编辑

STM32F107使用FreeRTOS8.2.3+LWIP1.4.1
用socket建立tcp server,使用select函数,做echo
现在遇到的问题是:
1、使用原子的网络助手连接,最多只能连接3个客户端发送接收,第四个客户端显示能连接但是不能发送和接收了,跟踪代码实际也没有连接上
2、两个或两个以上客户端连接上后发送接收,然后断开连接,再重新连接上就不能发送接收了。如果只是单独一个客户端连接断开再连接,发送接收正常

有尝试过把freertos的内存和lwip的内存调大,但是也没有什么作用。
tcp server的socket 编程,使用的是网友的例程。

不知道有没有人遇到过类似问题或解决思路,谢谢!

最佳答案

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

下载下来对比一下,试试,我记得是把里面一些定义改大!
活着才是王道!健康是一切的前提!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
10948
金钱
10948
注册时间
2013-3-8
在线时间
1188 小时
发表于 2016-2-23 23:30:14 | 显示全部楼层
下载下来对比一下,试试,我记得是把里面一些定义改大!

V1001.rar

16.13 KB, 下载次数: 1779

lwip

回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
10948
金钱
10948
注册时间
2013-3-8
在线时间
1188 小时
发表于 2016-2-24 08:43:00 | 显示全部楼层
我用的ucosiii+LWIP出现过这两个问题。最多能建两个,建第三个就会出问题!当时修改了两个文件就好了!等下我上传一下,你对比一下就行了。
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
10948
金钱
10948
注册时间
2013-3-8
在线时间
1188 小时
发表于 2016-2-24 08:46:47 | 显示全部楼层
顺便能不能把你的程序共享下,我就是因为用freeRTOS+LWIP不能实现创建多个连接,才换成ucosiii的!
回复

使用道具 举报

13

主题

296

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2066
金钱
2066
注册时间
2012-5-26
在线时间
291 小时
 楼主| 发表于 2016-2-24 10:26:18 | 显示全部楼层
augustedward 发表于 2016-2-24 08:43
我用的ucosiii+LWIP出现过这两个问题。最多能建两个,建第三个就会出问题!当时修改了两个文件就好了!等下 ...

问题解决了,谢谢!
问题1:改一下配置就好了
问题2:是应用问题,修改后好了
活着才是王道!健康是一切的前提!
回复

使用道具 举报

1

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2016-1-5
在线时间
49 小时
发表于 2016-3-16 17:52:22 | 显示全部楼层
lison0103 发表于 2016-2-24 10:26
问题解决了,谢谢!
问题1:改一下配置就好了
问题2:是应用问题,修改后好了

楼主好!请问您改的是哪的配置? 我按照从2楼下载下来的压缩包修改我的对应的文件,问题没解决 啊
回复

使用道具 举报

1

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2016-1-5
在线时间
49 小时
发表于 2016-3-17 08:02:44 | 显示全部楼层
augustedward 发表于 2016-2-24 08:46
顺便能不能把你的程序共享下,我就是因为用freeRTOS+LWIP不能实现创建多个连接,才换成ucosiii的!

请问你就改的这两个.h文件吗?我的lwipopt.h最后面没有这个:
extern int errno;
#define ERRNO
中间是原有代码
#define LWIP_NOASSERT
#define LWIP_NOERROR

回复

使用道具 举报

13

主题

296

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2066
金钱
2066
注册时间
2012-5-26
在线时间
291 小时
 楼主| 发表于 2016-3-17 08:33:19 | 显示全部楼层
佚名流浪 发表于 2016-3-17 08:02
请问你就改的这两个.h文件吗?我的lwipopt.h最后面没有这个:
extern int errno;
#define ERRNO

是的,我改的是opt.h文件里的一个netconn定义大小,具体是哪个忘了,对比一下
活着才是王道!健康是一切的前提!
回复

使用道具 举报

1

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2016-1-5
在线时间
49 小时
发表于 2016-3-17 09:25:08 | 显示全部楼层
lison0103 发表于 2016-3-17 08:33
是的,我改的是opt.h文件里的一个netconn定义大小,具体是哪个忘了,对比一下

opt里的参数全部按照下载的opt.h文件改了,还是只能连接两个,这是我监听连接的程序段:conn = netconn_new(NETCONN_TCP);  //创建一个TCP连接
        netconn_bind(conn,IP_ADDR_ANY,TCP_SERVER_PORT);  //绑定502端口号
        netconn_listen(conn);                  //进入监听模式
        conn->recv_timeout=20;          //禁止阻塞线程 等待20ms

                                for(jishu=0;jishu<20;jishu++)
                                {
                                        printf("%d",jishu);
                                        printf("\r\n");
                                        if(connmap[jishu]==0)    //没有建立连接
                                        {
                                                printf("%d",jishu);
                                                err=netconn_accept(conn,&newconn[jishu]); //接收连接请求
                                                printf("%d",err);
                                                if(err==ERR_OK) //有新的连接
                                                {
                                                        newconn[jishu]->recv_timeout=20;
                                                        netconn_getaddr(newconn[jishu],&ipaddr,&port,0); //获取远端IP地址和端口号               
                                                        remot_addr[3] = (uint8_t)(ipaddr.addr>>24);
                                                        remot_addr[2] = (uint8_t)(ipaddr.addr>>16);
                                                        remot_addr[1] = (uint8_t)(ipaddr.addr>> 8);
                                                        remot_addr[0] = (uint8_t)(ipaddr.addr);
                                                        printf("主机:%d.%d.%d.%d连接上服务器,主机端口号为:%d\r\n",remot_addr[0], remot_addr[1],remot_addr[2],remot_addr[3],port);
                                                        connmap[jishu]=1; //标记连接表,已经有连接
                                                OSTimeDlyHMSM(0,0,0,10);    /延时10ms
                                                }
                                        }
                                }

回复

使用道具 举报

1

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2016-1-5
在线时间
49 小时
发表于 2016-3-17 11:22:35 | 显示全部楼层
lison0103 发表于 2016-3-17 08:33
是的,我改的是opt.h文件里的一个netconn定义大小,具体是哪个忘了,对比一下

楼主您好:请问能不能把您的TCP server发我一份,我的老是解决不了。我的邮箱
1246435901@qq.com  
谢谢了!
回复

使用道具 举报

13

主题

296

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2066
金钱
2066
注册时间
2012-5-26
在线时间
291 小时
 楼主| 发表于 2016-3-17 13:31:33 | 显示全部楼层
佚名流浪 发表于 2016-3-17 11:22
楼主您好:请问能不能把您的TCP server发我一份,我的老是解决不了。我的邮箱
  
谢谢了!

我也是参考网上的,用的socket+select函数
lwip库兼容socket编程
socket的例程网上很多的
活着才是王道!健康是一切的前提!
回复

使用道具 举报

13

主题

296

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2066
金钱
2066
注册时间
2012-5-26
在线时间
291 小时
 楼主| 发表于 2016-3-17 13:34:31 | 显示全部楼层
活着才是王道!健康是一切的前提!
回复

使用道具 举报

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-8-25
在线时间
26 小时
发表于 2016-11-21 11:10:06 | 显示全部楼层
augustedward 发表于 2016-2-24 08:46
顺便能不能把你的程序共享下,我就是因为用freeRTOS+LWIP不能实现创建多个连接,才换成ucosiii的!

  请教下 freertos + lwip不能创建多个连接吗?
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
10948
金钱
10948
注册时间
2013-3-8
在线时间
1188 小时
发表于 2016-11-21 12:53:42 | 显示全部楼层
阳光灿烂的日子 发表于 2016-11-21 11:10
请教下 freertos + lwip不能创建多个连接吗?

应该是可以的,但我没调出来!后来也没有用了!
回复

使用道具 举报

7

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2014-8-22
在线时间
10 小时
发表于 2017-11-29 11:18:41 | 显示全部楼层
你好,不知FreeRTOS结合LWIP,能够连接和监听的最大TCP 和UDP数是多少呢?
回复

使用道具 举报

13

主题

296

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2066
金钱
2066
注册时间
2012-5-26
在线时间
291 小时
 楼主| 发表于 2017-11-29 15:32:30 | 显示全部楼层
cpx326 发表于 2017-11-29 11:18
你好,不知FreeRTOS结合LWIP,能够连接和监听的最大TCP 和UDP数是多少呢?

不知道,试过两三个,感觉和内存大小有关
活着才是王道!健康是一切的前提!
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2019-7-4
在线时间
6 小时
发表于 2019-7-5 18:47:17 | 显示全部楼层
augustedward 发表于 2016-2-24 08:46
顺便能不能把你的程序共享下,我就是因为用freeRTOS+LWIP不能实现创建多个连接,才换成ucosiii的!

ucosII 使用socket select實現不了server鏈接多個客戶端,能發郵箱一下代碼參考?2657100157@qq.com
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2019-7-4
在线时间
6 小时
发表于 2019-7-5 18:55:31 | 显示全部楼层
lison0103 发表于 2016-2-24 10:26
问题解决了,谢谢!
问题1:改一下配置就好了
问题2:是应用问题,修改后好了

請問我也用了socket select編寫server,使用網絡助手,衹能鏈接一個客戶端,再增加就沒有響應了,能把代碼分享一下看看?2657100157@qq.com
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2019-8-2
在线时间
18 小时
发表于 2019-11-16 10:21:27 | 显示全部楼层
楼主可以分享下源代码呀
回复

使用道具 举报

6

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2011-8-22
在线时间
13 小时
发表于 2021-1-12 16:58:44 | 显示全部楼层
我也遇到同样问题
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-5-29 04:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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