天线|RF射频
直播中

王明

7年用户 182经验值
私信 关注
[问答]

FreeRTOS+LWIP TCP Server Socket多客户端连接不正常该怎么办?

STM32F107使用FreeRTOS8.2.3+LWIP1.4.1
用socket建立tcp server,使用select函数,做echo
现在遇到的问题是:
1、使用原子的网络助手连接,最多只能连接3个客户端发送接收,第四个客户端显示能连接但是不能发送和接收了,跟踪代码实际也没有连接上
2、两个或两个以上客户端连接上后发送接收,然后断开连接,再重新连接上就不能发送接收了。如果只是单独一个客户端连接断开再连接,发送接收正常
有尝试过把freertos的内存和lwip的内存调大,但是也没有什么作用。
tcp server的socket 编程,使用的是网友的例程。
不知道有没有人遇到过类似问题或解决思路,谢谢!

回帖(11)

范潇潇

2019-9-12 06:41:18
顺便能不能把你的程序共享下,我就是因为用freeRTOS+LWIP不能实现创建多个连接,才换成ucosiii的!
举报

李纪生

2019-9-12 06:47:14
问题解决了,谢谢!
问题1:改一下配置就好了
问题2:是应用问题,修改后好了
举报

单雅丽

2019-9-12 07:17:47
是的,我改的是opt.h文件里的一个netconn定义大小,具体是哪个忘了,对比一下
举报

常小丽

2019-9-12 07:37:07
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("rn");
                                        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连接上服务器,主机端口号为:%drn",remot_addr[0], remot_addr[1],remot_addr[2],remot_addr[3],port);
                                                        connmap[jishu]=1; //标记连接表,已经有连接
                                                OSTimeDlyHMSM(0,0,0,10);    /延时10ms
                                                }
                                        }
                                }
举报

更多回帖

发帖
×
20
完善资料,
赚取积分