OpenEdv-开源电子网

标题: FreeRTOS+LWIP TCP Server Socket多客户端连接问题 [打印本页]

作者: lison0103    时间: 2016-2-23 23:30
标题: FreeRTOS+LWIP TCP Server Socket多客户端连接问题
本帖最后由 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 编程,使用的是网友的例程。

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

作者: augustedward    时间: 2016-2-23 23:30
下载下来对比一下,试试,我记得是把里面一些定义改大!

作者: augustedward    时间: 2016-2-24 08:43
我用的ucosiii+LWIP出现过这两个问题。最多能建两个,建第三个就会出问题!当时修改了两个文件就好了!等下我上传一下,你对比一下就行了。
作者: augustedward    时间: 2016-2-24 08:46
顺便能不能把你的程序共享下,我就是因为用freeRTOS+LWIP不能实现创建多个连接,才换成ucosiii的!
作者: lison0103    时间: 2016-2-24 10:26
augustedward 发表于 2016-2-24 08:43
我用的ucosiii+LWIP出现过这两个问题。最多能建两个,建第三个就会出问题!当时修改了两个文件就好了!等下 ...

问题解决了,谢谢!
问题1:改一下配置就好了
问题2:是应用问题,修改后好了
作者: 佚名流浪    时间: 2016-3-16 17:52
lison0103 发表于 2016-2-24 10:26
问题解决了,谢谢!
问题1:改一下配置就好了
问题2:是应用问题,修改后好了

楼主好!请问您改的是哪的配置? 我按照从2楼下载下来的压缩包修改我的对应的文件,问题没解决 啊
作者: 佚名流浪    时间: 2016-3-17 08:02
augustedward 发表于 2016-2-24 08:46
顺便能不能把你的程序共享下,我就是因为用freeRTOS+LWIP不能实现创建多个连接,才换成ucosiii的!

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


作者: lison0103    时间: 2016-3-17 08:33
佚名流浪 发表于 2016-3-17 08:02
请问你就改的这两个.h文件吗?我的lwipopt.h最后面没有这个:
extern int errno;
#define ERRNO

是的,我改的是opt.h文件里的一个netconn定义大小,具体是哪个忘了,对比一下
作者: 佚名流浪    时间: 2016-3-17 09:25
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
                                                }
                                        }
                                }


作者: 佚名流浪    时间: 2016-3-17 11:22
lison0103 发表于 2016-3-17 08:33
是的,我改的是opt.h文件里的一个netconn定义大小,具体是哪个忘了,对比一下

楼主您好:请问能不能把您的TCP server发我一份,我的老是解决不了。我的邮箱
1246435901@qq.com  
谢谢了!
作者: lison0103    时间: 2016-3-17 13:31
佚名流浪 发表于 2016-3-17 11:22
楼主您好:请问能不能把您的TCP server发我一份,我的老是解决不了。我的邮箱
  
谢谢了!

我也是参考网上的,用的socket+select函数
lwip库兼容socket编程
socket的例程网上很多的
作者: lison0103    时间: 2016-3-17 13:34
http://blog.csdn.net/god2469/article/details/8761346
http://blog.csdn.net/zhenjing/article/details/4770490
作者: 阳光灿烂的日子    时间: 2016-11-21 11:10
augustedward 发表于 2016-2-24 08:46
顺便能不能把你的程序共享下,我就是因为用freeRTOS+LWIP不能实现创建多个连接,才换成ucosiii的!

  请教下 freertos + lwip不能创建多个连接吗?
作者: augustedward    时间: 2016-11-21 12:53
阳光灿烂的日子 发表于 2016-11-21 11:10
请教下 freertos + lwip不能创建多个连接吗?

应该是可以的,但我没调出来!后来也没有用了!
作者: cpx326    时间: 2017-11-29 11:18
你好,不知FreeRTOS结合LWIP,能够连接和监听的最大TCP 和UDP数是多少呢?
作者: lison0103    时间: 2017-11-29 15:32
cpx326 发表于 2017-11-29 11:18
你好,不知FreeRTOS结合LWIP,能够连接和监听的最大TCP 和UDP数是多少呢?

不知道,试过两三个,感觉和内存大小有关
作者: HMSHGH    时间: 2019-7-5 18:47
augustedward 发表于 2016-2-24 08:46
顺便能不能把你的程序共享下,我就是因为用freeRTOS+LWIP不能实现创建多个连接,才换成ucosiii的!

ucosII 使用socket select實現不了server鏈接多個客戶端,能發郵箱一下代碼參考?2657100157@qq.com
作者: HMSHGH    时间: 2019-7-5 18:55
lison0103 发表于 2016-2-24 10:26
问题解决了,谢谢!
问题1:改一下配置就好了
问题2:是应用问题,修改后好了

請問我也用了socket select編寫server,使用網絡助手,衹能鏈接一個客戶端,再增加就沒有響應了,能把代碼分享一下看看?2657100157@qq.com
作者: hs123456    时间: 2019-11-16 10:21
楼主可以分享下源代码呀
作者: echowjk    时间: 2021-1-12 16:58
我也遇到同样问题




欢迎光临 OpenEdv-开源电子网 (http://47.111.11.73/) Powered by Discuz! X3.4